📄 hanoi2.cpp
字号:
#include<stdio.h>
#include<math.h>
void move(int n, char from,char to)
{
printf("move %d %c ----> %c\n",n,from,to);
}
int main()
{
int i,n,flag,ta,tb,tc,cin;
int a[100]={65,},b[100]={66,32767},c[100]={67,32767};
while(scanf("%d",&n)!=EOF)
{
tb=1;
tc=1;
for(i=1;i<=n;i++)a[i]=n+1-i;
ta=n;
cin=(int)(pow(2,n)-1);
for(i=1;i<=cin;i++)
{
if(a[ta]<b[tb]&&a[ta]<c[tc])flag=1;
if(b[tb]<a[ta]&&b[tb]<c[tc])flag=2;
if(c[tc]<b[tb]&&c[tc]<a[ta])flag=3;
if(i%2)
{
if(flag==1)
{move(a[ta],a[0],b[0]);b[++tb]=a[ta--];}
else if(flag==2)
{move(b[tb],b[0],c[0]);c[++tc]=b[tb--];}
else if(flag==3)
{move(c[tc],c[0],a[0]);a[++ta]=c[tc--];}
}
else
{
if(flag==1)
{
if(b[tb]<c[tc])
{move(b[tb],b[0],c[0]);c[++tc]=b[tb--];}
else
{move(c[tc],c[0],b[0]);b[++tb]=c[tc--];}
}
else if(flag==2)
{
if(a[ta]<c[tc])
{move(a[ta],a[0],c[0]);c[++tc]=a[ta--];}
else
{move(c[tc],c[0],a[0]);a[++ta]=c[tc--];}
}
else if(flag==3)
{
if(a[ta]<b[tb])
{move(a[ta],a[0],b[0]);b[++tb]=a[ta--];}
else
{move(b[tb],b[0],a[0]);a[++ta]=b[tb--];}
}
}
}
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -