汉诺塔问题
#include"stdio.h"
void hanoi(int, char, char, char);
void move(char, char);
int main()
{
//汉诺塔问题
int n;//n代表盘子的个数
printf("Please input n:");
scanf("%d", &n);
hanoi(n, 'A', 'B', 'C');
return 0;
}
/*n个盘子,从A移到C,用B作临时存放盘子的杆子*/
void hanoi(int n, char A, char B, char C)
{
if (n == 1)
move(A, C);
else
{
hanoi(n - 1, A, C, B);
//把n-1个盘子从A杆子经过C杆子移到B
//可以这样理解:就是把n-1个盘子直接移动到B
//中间的C杆子不考虑
move(A, C);
//然后再把A杆子剩下的1个盘子,也就是第n个盘子移动到C杆子
hanoi(n - 1, B, A, C);
//然后再把B杆子里的n-1个盘子,通过A移动到C
//可以这样理解:就是把n-1个盘子直接移动到C
//中间的A杆子不用考虑
}
}
/*显示盘子的移动轨迹*/
void move(char c1,char c2)
{
printf("%c -> %c\n", c1, c2);
}