递归经典算法-汉诺塔问题求解-C/C++语言实现

问题:

古代有一个梵塔,塔内有3个基座A、B、C,开始时A基座上有64个盘子,盘子大小不等,大的在下,小的在上。有一个老和尚想把这64个盘子从A座移到B座,但每次只允许移动一个盘子,且在移动过程中在3个基座上的盘子都始终保持大盘在下,小盘在上。在移动过程中可以利用C基座做辅助。请编程打印出移动过程 。

分析

把n阶的汉诺塔问题的模块记作hanoi(n,a,b,c)
a代表每一次移动的起始基座,
b代表每一次移动的终点基座,
c代表每一次移动的辅助基座
则汉诺塔问题hanoi(n,a,b,c)等价于以下三步:
第一步,hanoi(n-1,a,c,b);
第二步,把下面“一个”盘子从a基座移到b基座;
第三步, hanoi(n-1,c,b,a)。

标题完整代码

#include <iostream>
using namespace std;

int count = 0;

void hanoi(int n,char a,char b,char c){
	
	if(n>0){
		hanoi(n-1,a,c,b);
		cout<<n<<":"<<a<<"-->"<<b<<" "<<c<<endl;
		count++;
		hanoi(n-1,c,b,a);
	}

}

int main(int argc, char const *argv[])
{
	
	hanoi(5,'A','B','C');
	cout<<"The Total Times: "<<count<<endl;
	return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_42678511/article/details/106699215