汉诺塔问题:
有3个座A,B,C 每次只能移动一个盘,要实现64个盘子从A移到C上,64个盘子在A上从小到大,在移动过程中要保持始终盘子从小到大,要求编程输出移动的顺序
问怎么移动64个盘子,A-->C,借助B?
先实现上面的63个移动到B上,将最后一个盘子直接从A移到C上 ,再将63个盘子从B移到C
问怎么移动63个盘子,A-->B,借助C?
先实现上面的62个移动到C上,将最后一个盘子直接从A移到B上 ,再将62个盘子从C移到B
怎么移动3个盘子????前3个操作借助C,后3个操作借助A
A-->C
A-->B
C-->B
A-->C
B-->A
B-->C
A-->C
由此可见,将n个盘子从A移到C上可表示为
- 将A上n-1个盘子借助C移到B上
- 将A上一个盘子移到C
- 将B上n-1个盘子借助A移到C上
//汉诺塔 #include<stdio.h> void move(char one,char two){ printf("%c-->%c\n",one,two); } void hanoi(int n,char one,char two,char three){ if(n==1) move(one,three); else{ hanoi(n-1,one,three,two); move(one,three); hanoi(n-1,two,one,three); } } int main(){ int n; scanf("%d",&n); hanoi(n,'A','B','C'); return 0; }