汉诺塔是一种古老的游戏。
一共3个柱子,标号为1,2,3
1号柱子有从大到小一共n个盘子。
每次移动最上方的一个盘子,可以移动到其他的柱子。
任何一个盘子,都不能叠在比它更小的盘子的上方。
请把盘子从1号柱子,全部移动到3号柱子。
起始:
移动到这样:
现在,给出了n个盘子,请你描述一下用最短次数移动的过程。
void move(char pos1, char pos2)
{
printf("%c->%c\n", pos1, pos2);
}
void hanoi(int n, char pos1, char pos2, char pos3)
{
//判断柱子上有几个盘子,如果n=1,直接将盘子从柱子1移动到柱子3
if (n == 1)
{
move(pos1, pos3);
}
else {
//借助柱子3将盘子从柱子1移动到柱子2
hanoi(n - 1, pos1, pos3, pos2);
move(pos1, pos3);
//借助柱子1将盘子从柱子2移动到柱子3
hanoi(n - 1, pos2, pos1, pos3);
}
}
int main()
{
hanoi(3, 'A', 'B', 'C');
return 0;
}
运行结果如下