【算法】汉诺伊塔

题目:

输入汉诺伊塔的层数n, 打印这n层塔身从a棍通过b棍移动到c棍的步骤过程, 输出一共移动的次数

汉诺伊塔的结构是塔的高层面积一定比低层更小, 每一次只能移动一层塔身, 每次移动都遵循此原理

多组输入

算法:

利用递归思想,将n层塔身从a棍利用b棍移动到c棍,首先要将n-1层塔身通过c棍移动到b棍,再将最后一层直接移动到c棍(面积最大的一层),最后再将b棍上的n-1层通过a棍移动到c棍

源码:

#include <iostream>
using namespace std;

int g_count = 0;

void Move(char a, char b)
{
	cout << a << " -> " << b << endl;
	++g_count;
}


// a柱借助b柱将n个木块移到c柱
void Hnoi(char a, char b, char c, int n)
{
	if (n == 1)
		Move(a, c);
	else
	{
		Hnoi(a, c, b, n - 1);
		Move(a, c);
		Hnoi(b, a, c, n - 1);
	}
}

int main()
{
	int n;
	cin >> n;

	Hnoi('A', 'B', 'C', n);
	cout << "the step count is : " << g_count << endl;

	return 0;
}

猜你喜欢

转载自blog.csdn.net/phoenixFlyzzz/article/details/130438825