当前位置: 代码迷 >> Java相关 >> 请问,什么是hanoi塔,它的原理是什么?
  详细解决方案

请问,什么是hanoi塔,它的原理是什么?

热度:351   发布时间:2007-04-07 10:36:51.0
请问,什么是hanoi塔,它的原理是什么?
请问,什么是hanoi塔,它的原理是什么?编程思想是怎样的?
谢谢.
搜索更多相关的解决方案: hanoi  原理  

----------------解决方案--------------------------------------------------------
#include<stdio.h>
void move(unsigned n,char fromd,char tod,char us);
int i=0;
int main()
{
unsigned n;
int j;
printf("请输入盘子数:");
scanf("%d",&n);
printf(" 位置 : a b c ");
move(n,'a','c','b');
printf(" 共计: %d ",i);
scanf("%d",&n);
return 0;
}
void move(unsigned n,char fromd,char tod,char us)
{
if(n>0)
{
move(n-1,fromd,us,tod);
++i;
switch(fromd)
{
case 'a':
switch(tod)
{
case 'b':
printf(" 第[%d]步: %2d----->%2d ",i,n,n);
break;
case 'c':
printf(" 第[%d]步: %2d------------->%2d ",i,n,n);
break;
}
break;
case 'b':
switch(tod)
{
case 'a':
printf(" 第[%d]步: %2d<-----%2d ",i,n,n);
break;
case 'c':
printf(" 第[%d]步: %2d----->%2d ",i,n,n);
break;
}
break;
case 'c':
switch(tod)
{
case 'a':
printf(" 第[%d]步: %2d<-------------%2d ",i,n,n);
break;
case 'b':
printf(" 第[%d]步: %2d<-----%2d ",i,n,n);
break;
}
break;
}
move(n-1,us,tod,fromd);
}
}
/*
编写一个递归程序,解决Hanoi塔问题。要求盘数通过键盘输入控制,打印移动各盘的顺序。*/
----------------解决方案--------------------------------------------------------
2楼真到位。汉斯塔的逻辑就是只允许从小到大,只能在固定的栏目上,按从小到大的顺序达到目的。
----------------解决方案--------------------------------------------------------

用栈实现


----------------解决方案--------------------------------------------------------
一般的电子词典中都有这个游戏,,,楼主可以找个试一下,很快就明白了。
----------------解决方案--------------------------------------------------------