很简单,用三个栈表示,比如分别为A、B、C(刚开始全在A中)
Hanoi(x,y,tmp,n) //要把n个盘从x移到y,tmp作为buffer
{
if(n-1>0)Hanoi(x,tmp,y,n-1); //把上面n-1个先放到tmp里面
move the last one from x to y
if(n-1>0)Honoi(tmp,y,x,n-1); //再把那n-1个移过来
}main()
{
Hanoi(A,C,B,9); //以9为例
}
Hanoi(x,y,tmp,n) //要把n个盘从x移到y,tmp作为buffer
{
if(n-1>0)Hanoi(x,tmp,y,n-1); //把上面n-1个先放到tmp里面
move the last one from x to y
if(n-1>0)Honoi(tmp,y,x,n-1); //再把那n-1个移过来
}main()
{
Hanoi(A,C,B,9); //以9为例
}
解决方案 »
- 为什么GlobalAlloc的内存是可以"移动"的,而HeapAlloc的就不可以?
- <求助>如何收发短信 ??
- 请教,VS2008环境,console下,如何实现对A目录下的所有目录遍历,以读取main.txt为目的。
- VC 未规范化 列表控件表头的实现???高分求助,谢谢
- VC下程序关闭后,为何在进程窗口中还没有结束?
- 如何获得当前鼠标位置?
- BCB虽然非常好,就可惜BCB可用的资料太少了,没招,只好改用VC了,郁闷!
- 关于mmTimer的问题,困扰了好几天了,大侠请帮忙啊!
- 请那位高手给详细的讲一下视口与窗口的设置问题?
- 紧急求助!!!!我从网上下载TCP/IP详解第一卷 协议(PDF格式),请问用什么打开?????
- 什么是通道?有什么用,如何学习相关编程?
- 一个简单的问题关于CListCtl的
#include"stdio.h"
move(char source,char target)
{
printf("%c->%c\n",source,target);
}
hanoi(char A,char B,char C,int n)//把n个盘子从A针上借助B针移到C针上
{
if(n==1)
move(A,C);
else
{
hanoi(A,C,B,n-1);//把n-1个盘子从A针上借助C针移到B针上
move(A,C);
hanoi(B,A,C,n-1);//把n-1个盘子从B针上借助A针移到C针上
}
}