河内五钉塔
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了河内五钉塔相关的知识,希望对你有一定的参考价值。
第9步出现问题。做出错误的举动
我正在寻找解决方案。我没有找到它,所以我尝试将河内4钉代码更改为5钉。而且它不能正常工作
void Shift(int s, int d){
cout<<s<<" "<<d<<endl;
}
void Hanoi5(int n, int from_rod, int to_rod,int aux_rod1, int aux_rod2, int aux_rod3)
{
if (n == 0)
return;
if (n == 1) {
Shift(from_rod,to_rod);
return;
}
Hanoi5(n - 2, from_rod, aux_rod1, aux_rod2, aux_rod3, to_rod);
Shift(from_rod, aux_rod3);
Shift(from_rod, aux_rod2);
Shift(from_rod, to_rod);
Shift(aux_rod2, to_rod);
Shift(aux_rod3, to_rod);
Hanoi5(n - 2, aux_rod1, to_rod, from_rod, aux_rod2, aux_rod3);
}
int main(){
Hanoi5(5,1, 2, 3, 4, 5);
}
4钉解决方案:
if (n == 0)
return;
if (n == 1) {
Shift(from_rod,to_rod);
return;
}
Hanoi4(n - 2, from_rod, aux_rod1, aux_rod2, to_rod);
Shift(from_rod, aux_rod2);
Shift(from_rod, to_rod);
Shift(aux_rod2, to_rod);
Hanoi4(n - 2, aux_rod1, to_rod, from_rod,aux_rod2);
我需要一个动作列表,在9号出问题了
答案
我认为您只是在学习解决方案,不知道如何解决。如果是您了解问题,那么您应该知道没有所谓的问题编程为4钉或编程为5钉。无论您通过4还是5,算法都应该是通用的。它不应该像6那样需要增加一行来换行,而7需要7来增加行。程序应该自己完成。因此,请考虑再次学习。这是简单的方法。检查您是否理解它,或者将其注释掉,我将很乐意对其进行详细说明。
void move(int , char , char , char );
int count = 0;
int main()
{
char A = 'A' , B = 'B' , C = 'C';
move(6,A,C,B);
printf("%d",count);
return 0;
}
void move(int n , char source , char destination,char aux)
{
if(n==1){
count++;
printf("Move rod from %c to %c
",source,destination);
return;
}
move(n-1,source,aux,destination);
move(1,source,destination,aux);
move(n-1,aux,destination,source);
}
以上是关于河内五钉塔的主要内容,如果未能解决你的问题,请参考以下文章
c_cpp 以递归方式做河内塔问题的基准.n = 20来自维基百科的伪代码:https://zh.wikipedia.org/wiki/汉诺塔