河内塔的问题
Tower of hanoi problem
大家好,我在河内塔上遇到了一个问题:
我们有一堆不同颜色的圆柱体,它们交替地堆叠在一起。
工作是将两叠相同颜色的纸分开
我可以用递归写一个普通的河内塔的代码(算法),但我不能弄清楚这部分。有人能帮忙吗?
常规河内问题代码:
#include<iostream>
using namespace std;
int count=0;
void hanoi(char a,char b,char c,int x)
{
if(x>1)
{
hanoi(a,c,b,x-1);
hanoi(a,b,c,1);
hanoi(c,b,a,x-1);
}
else
{
cout<<"Move a Disk from "<<a<<" to "<<b<<endl; count++;
}
}
int main()
{
int n;
cout<<"Enter the height of stack";
cin>>n;
hanoi('A','B','C',n);
cout<<"nNo. of changes done:"<<count;
return 0;
}
解决n
次问题,交替放置解决方案。
int main()
{
int n;
cout<<"Enter the height of stack";
cin>>n;
char startPeg = 'A';
char interPeg = 'B';
char slnPeg = 'C';
while(n > 0) {
hanoi(startPeg,interPeg,slnPeg,n);
n--;
char temp = startPeg;
startPeg = slnPeg;
slnPeg = temp;
}
return 0;
}
它是这样工作的。假设我们的堆栈的颜色是红色(R)和黄色(Y),并且它有5个单位高:
| | |
Y|Y | |
RR|RR | |
YYY|YYY | |
RRRR|RRRR | |
YYYYY|YYYYY | |
第一次运行后,它看起来像这样:
| | |
| | Y|Y
| | RR|RR
| | YYY|YYY
| | RRRR|RRRR
| | YYYYY|YYYYY
第二次运行后,看起来像这样:
| | |
Y|Y | |
RR|RR | |
YYY|YYY | |
RRRR|RRRR | YYYYY|YYYYY
第三次运行后,它看起来像这样:
| | |
| | Y|Y
| | RR|RR
| | YYY|YYY
RRRR|RRRR | YYYYY|YYYYY
在第四次运行之后,这个:
| | |
| | |
Y|Y | |
RR|RR | YYY|YYY
RRRR|RRRR | YYYYY|YYYYY
在第五次也是最后一次运行之后,这个:
| | |
| | |
| | Y|Y
RR|RR | YYY|YYY
RRRR|RRRR | YYYYY|YYYYY
到此为止。
如果你迫切需要递归,可以这样做:
void painful(char start, char inter, char sln, int n) {
if(n == 0) return;
hanoi(start,inter,sln);
painful(sln,inter,start,n-1);
}
int main()
{
int n;
cout<<"Enter the height of stack";
cin>>n;
painful('A','B','C',n);
return 0;
}
#include <stdio.h>
hanoi(char a, char b, char c, int h) {
if(h<=1){
printf("move:%c to %c :n", a, b );
}else{
hanoi(a,c,b, h-1);
hanoi(a,b,c, 1);
hanoi(c,b,a, h-1);
}
}
main(){
int input;
int i ;
scanf("%d", &input);
/* A is the src and B is dest */
for(i=1; i< input ; i++){
if(i%2){
hanoi('A', 'B', 'C', input-i);
}else{
hanoi('B', 'A', 'C', input-i);
}
}
}
// work ?
相关文章:
- 我在范围内未声明的错误类有问题
- 如何在不到O(N)的时间内解决这个问题?
- 如何在cpp中使用地图显示给定日期范围内(在下面的问题中)的费率?
- 简单的问题 - 如何从单独的"结构"内的'class'访问变量?
- GLUT 问题:重新声明 c++ 内置类型'wchar_t'时出错
- VS2019中内联功能的一些问题
- (2 问题)"类"类型重新定义(即使 #pragma 一次),以及静态函数内的静态成员对象初始化?
- CGAL 3D 周期性德劳内三角测量与信息的问题
- 指针范围问题和返回类中封装的指针向量内的指针引用
- 在VC++中从DLLMAIN内部调用D3D的CREATEDEVICE时,它会创建一个死锁(loaderlock?)。有没有办法克服这个问题?最终目标内
- 指针诺塔顿有什么问题
- 在C 中给定范围内计算素数的问题
- visual studio c++中的内联程序集问题
- 内联访问说明符出现语法问题
- 有关通过派生类在命名空间内继承的问题
- 命名空间内类的循环依赖问题
- 以下内联程序集有什么问题
- 结构内工会的常量成员的问题
- 从Qt3到Qt4:内部类的问题(Q3GList和Q3PtrCollection)
- 模板类复制内部类问题中的模板分配运算符