汉诺塔:汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上安大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。
为了实现 n个盘从 借助c 从a 移动到 b
思路如下:
首先考虑极限当只有一个盘的时候 只要 盘直接从 a -> b即可
那么当有2个盘的时候就只要先把1号盘从a -> c 然后 把2号盘 a->b 再 把 2好盘从 c - > b
那么当有n个盘的时候你只要先把 n-1个 盘 借助 b 移动到 c 然后将 n号盘从 a -> b
那么这时候只要将 n-1想办法从c移动到 b 借助 a 那么就可以先把 n-2个盘借助b移动到a然后 把n-1号盘从c-> b如此递归就是了!
- #include <stdio.h>
-
#include <stdlib.h>
-
-
void mov(int n,char a,char b)
-
{
-
printf("disk%d : %c --> %c\n", n,a,b);
-
}
-
-
void Hanoi(int n,char a,char b,char c)
-
{
-
if(n == 0) return;
-
Hanoi(n-1,a,c,b);
-
mov(n,a,b);
-
Hanoi(n-1,c,b,a);
-
}
-
int main(void)
-
{
-
Hanoi(3,'a','b','c');
-
return 0;
-
}
阅读(1963) | 评论(0) | 转发(0) |