输入一个大于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;
}