汉诺塔问题是一个经典的问题。汉诺塔(Hanoi Tower),又称河内塔,源于印度一个古老传说。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,任何时候,在小圆盘上都不能放大圆盘,且在三根柱子之间一次只能移动一个圆盘。问应该如何操作?https://www.bilibili.com/video/av9830115
2: A-->B ,A-->C ,B--->C
3.
上面的两块当做整体,放到B ,把 最底下的放到 C
递归思想:
n : 把 上面的 n-1 看成整体,放大 B ,把最底下的放到 C:
void Hanoi( int n ,char A ,char B,char C){// A: 起点 B:辅助点 C :终点。
//递归结束条件 n=1 只有一个盘子,直接放到 C
if(n==1){
move (A,C); //printf( %c -----> %c,A,C)'
}else{// n-1
Hanoi(n-1 ,A,C,B);// 把 C 当做辅助点 ,把 A 上面的n-1 块移动到B :把 A 上面的n-1 绕过 C 放到 B
move(A,C);//把 A 最下面的放到C printf(" %c -----> %c",A,C);
Hanoi(B,A,C);把 A 当做辅助点 把B 上面的n-1 绕过A 放到C
}
}