hanoi.cpp 620 B

12345678910111213141516171819202122232425262728
  1. // http://www.cnblogs.com/antineutrino/p/3334540.html
  2. /*
  3. 1. 移动n-1个盘子 A -> C -> B
  4. 2. 移动n个盘子 A -> C
  5. 3. 移动n-1个盘子 B -> A -> C
  6. */
  7. #include <iostream>
  8. #include <cstdio>
  9. using namespace std;
  10. long long step = 1;
  11. // n: 第n个盘子(从上至下) a: 原柱子 b: 过程柱子 c: 目标柱子
  12. void hanoi(int n, char a, char b, char c) {
  13. if (n == 0) return;
  14. hanoi(n-1, a, c, b); // 直到最顶端柱子
  15. printf("STEP%lld-%d:%c-->%c\n", step++, n, a, c); // A ---C--->B
  16. hanoi(n-1, b, a, c); // B ---A--->C
  17. }
  18. int main() {
  19. int n;
  20. cin >> n;
  21. hanoi(n, 'A', 'B', 'C');
  22. return 0;
  23. }