-2
因此,我有一个程序,显示解决河内拼图的模拟。我的程序大部分工作正常,但不会在应该时终止。一旦所有光盘都在C钉(C C C)上,它应该终止,但是我的光盘仍然是第四张没有给出的光盘。应该只有三个光盘。任何帮助,将不胜感激!解决河内拼图递归
#include <iostream>
using namespace std;
const int num = 3;
const char from_peg = 'A';
const char to_peg = 'B';
const char temp_peg = 'C';
char position[num];
void moveDiscs(int num,int disc,char source,char dest, char spare){
if (disc == 0){
position[disc]=dest;
cout<<"Moved disc "<<disc+1<<" to peg "<<dest;
cout<<" (";
for(int i = 0;i<num;i++){
cout<<position[i]<<" ";
}
cout<<")"<<endl;
}else{
moveDiscs(num,disc-1,source,spare,dest);
position[disc]=dest;
cout<<"Moved disc "<<disc+1<<" to peg "<<dest;
cout<<" (";
for(int i = 0;i<num;i++){
cout<<position[i]<<" ";
}
cout<<")"<<endl;
moveDiscs(num,disc-1,spare,dest,source);
}
}
int main() {
cout<<"Starting Position for 3 discs are (";
for(int i = 0;i<num;i++){
position[i]='A';
cout<<position[i]<<" ";
}
cout<<")"<<endl;
moveDiscs(3,3,from_peg,to_peg,temp_peg);
return 0;
}
输出:
Starting Position for 3 discs are (A A A)
Moved disc 1 to peg C (C A A)
Moved disc 2 to peg B (C B A)
Moved disc 1 to peg B (B B A)
Moved disc 3 to peg C (B B C)
Moved disc 1 to peg A (A B C)
Moved disc 2 to peg C (A C C)
Moved disc 1 to peg C (C C C)
Moved disc 4 to peg B (C C C)
Moved disc 1 to peg B (B C C)
Moved disc 2 to peg A (B A C)
Moved disc 1 to peg A (A A C)
Moved disc 3 to peg B (A A B)
Moved disc 1 to peg C (C A B)
Moved disc 2 to peg B (C B B)
Moved disc 1 to peg B (B B B)
'position [disc] = dest;'使用'main'中第一个调用的else区块中的越界索引修改位置。 –
看起来像if块正在检查光盘0-3,而在else中它最终输出光盘+1。不会“给出”答案,但看看你如何比较光盘和输出应该让你走上正确的轨道。 – Das
[不是矢量乐趣?](http://ideone.com/5MjTjb) - 问题的即时诊断。 – PaulMcKenzie