汉诺塔

思路:

   1):将n-1个较小圆盘依照规则从塔a移动到塔c(必须借助塔b)

   2):将第n个圆盘即最大盘从a移动到b

   3):将c上的n-1个圆盘移动到b上(借助a)

具体参考:算法分析与设计(第三版)-----王晓东p19---->p21

#include<iostream>
using namespace std;

/*将圆盘从x移动到y上*/
void move(char x,char y)
{
	cout<<x<<"--->"<<y<<endl;
}

/*将n个圆盘从塔a移动到塔b上(借助塔b)*/
void hanoi(int n,char a,char b,char c)
{
	if(n == 1)/*只有一个圆盘的话直接移动*/
	{
		move(a,b);
	}
	else
	{
		hanoi(n-1,a,c,b);	/*将n-1个圆盘移动到c上(借助b)*/
		move(a,b);			/*将第n个圆盘直接放到b盘上*/
		hanoi(n-1,c,b,a);	/*将c上的n-1个圆盘移动到b上(借助a)*/
	}
}

int main()
{
	int n;

	cout<<"请输入圆盘的个数:"<<endl;
	cin>>n;

	hanoi(n,'a','b','c');
	return 0;
}
汉诺塔_第1张图片

你可能感兴趣的:(汉诺塔,cc++,算法分析与设计)