标题:[求助]汉诺塔问题
只看楼主
a8451727
Rank: 1
等 级:新手上路
帖 子:238
专家分:5
注 册:2007-5-22
结帖率:86.67%
 问题点数:0 回复次数:11 
[求助]汉诺塔问题

如下面汉诺塔的递归,要怎样才能得出A、B、C的移动次数?
递归中可以用 int i; i++; cout<<i; 计算次数吗?或可以用什么办法?

#include<iostream>
using namespace std;

void move(int n,char source,char destination,char spare);

int main()
{
const char PEG1='A',
PEG2='B',
PEG3='C';

cout<<"This program solves the Hanoi Towers puzzle.\n\n";
cout<<"Enter the nuimber of disks: ";
int numDisks;
cin>>numDisks;
cout<<endl;

move(numDisks,PEG1,PEG2,PEG3);
return 0;
}

void move(int n,char source,char destination,char spare)
{
if(n<=1)
cout<<"Move the top disk form "<<source<<" to "
<<destination<<endl;
else
{
move(n-1,source,spare,destination);
move(1,source,destination,spare);
move(n-1,spare,destination,source);
}
}

[此贴子已经被作者于2007-7-2 22:49:47编辑过]

搜索更多相关主题的帖子: 汉诺塔 int char cout 
2007-07-02 22:47
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
得分:0 
void move(int count,int start,int finish,int temp){
if(count > 0){
move(count-1,start,temp,finish);
cout << "move disk " << count << " form"
<< start << " to " << finish << ".\n";
move(count-1,temp,finish,start);
}
}

int main(){
move(3,1,3,2);
return 0;
}

try it out!

[此贴子已经被作者于2007-7-2 23:28:40编辑过]


Fight  to win  or  die...
2007-07-02 23:01
a8451727
Rank: 1
等 级:新手上路
帖 子:238
专家分:5
注 册:2007-5-22
得分:0 
回复:(aipb2007)void move(int count,int start,in...

不行哦,运行结果这样的


2007-07-02 23:17
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
得分:0 
结果难道不是这样?
你想要什么结果?

Fight  to win  or  die...
2007-07-02 23:22
a8451727
Rank: 1
等 级:新手上路
帖 子:238
专家分:5
注 册:2007-5-22
得分:0 
[IMG]http://photo.store.qq.com/http_imgload.cgi?/rurl2=9c2d97f2c8e52c759898c024cdc05454a35f12a258cffc679fbf55fbde59672a1c028d4882b8a497e007928d7835bf89a5970f866307f559e5dbf703e89270d2e4483d28aeb294c9854541b5cdea3c81182bc858[/IMG]
我想把开头那全是1那也递归下去 123...N
也就是想得到他一共移动了几次。

2007-07-02 23:28
a8451727
Rank: 1
等 级:新手上路
帖 子:238
专家分:5
注 册:2007-5-22
得分:0 
移动几次后,全部移完成。

2007-07-02 23:30
aipb2007
Rank: 8Rank: 8
来 自:CQU
等 级:贵宾
威 望:40
帖 子:2879
专家分:7
注 册:2007-3-18
得分:0 
我不太明白你的意思,我那个是模拟整个过程。
你是想要计算一共移动的次数吗?比如,3个盘,7次。
如果是,可以用记数+1。

不过,更简单的是 2^n-1 次,n是盘数。


还有,你程序中每次移动top,那个top是那个塔不清楚。

Fight  to win  or  die...
2007-07-02 23:32
a8451727
Rank: 1
等 级:新手上路
帖 子:238
专家分:5
注 册:2007-5-22
得分:0 
嗯,就是想要一共移动的次数。就比如 A to c算一次A to b算一次,C to B又算一次。
是3个盘,移动7次这个数。
2^n-1可以得到移动次数了,谢谢了

2007-07-02 23:41
a8451727
Rank: 1
等 级:新手上路
帖 子:238
专家分:5
注 册:2007-5-22
得分:0 
如果我想把每次移动记录下来,可以做到吗?
如:
1 A TO C
2 A TO B
3 C TO B
.....
N C TO B

第几步移动哪个。
也就是,我想让一个三岁小孩根据一步步来也能完成移动。

[此贴子已经被作者于2007-7-2 23:49:40编辑过]


2007-07-02 23:48
a8451727
Rank: 1
等 级:新手上路
帖 子:238
专家分:5
注 册:2007-5-22
得分:0 

试过好多次都不懂该怎样做。


2007-07-02 23:53



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-152172-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 1.060694 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved