⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hanoi2.cpp

📁 《数据结构-使用C语言》第三版
💻 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 + -