输入一个大于0的正整数
n层汉诺塔从最左边移动到最右边的全部过程
3
Move 1 from left to right Move 2 from left to mid Move 1 from right to mid Move 3 from left to right Move 1 from mid to left Move 2 from mid to right Move 1 from left to right
#include <stdio.h> #include <iostream> using namespace std; void move(int n, char* pos1, char* pos3) { printf("Move %d from %s to %s\n", n, pos1, pos3); } void Hanoi(int n, char* pos1, char* pos2, char* pos3) { //如果是1个盘子,直接从起始柱A移动到目标柱C if (n == 1) move(n, pos1, pos3); else { //如果盘子大于1个,需要把n-1个盘子,从起始柱pos1,通过目标柱pos3,移动到中转柱pos2 Hanoi(n-1, pos1, pos3, pos2); //此时pos1上的n-1个盘子全部移动pos2上去了,那么可以直接把pos1上剩下的1个盘子,直接移动到pos3上 move(n, pos1, pos3); //把pos2剩下的n-1个盘子,通过中转位置pos1,移动到目标位置pos3 Hanoi(n-1, pos2, pos1, pos3); } } int main() { int n; while(cin >> n) { char* pos1 = "left"; char* pos2 = "mid"; char* pos3 = "right"; Hanoi(n, pos1, pos2, pos3); } return 0; }