C++实现汉诺塔算法案例
汉诺塔的规则:
注:图片素材–>路飞学城
算法过程原理:
根据上图,利用递归实现汉诺塔算法。
算法实现:
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <string>
using namespace std;
void move(int n, string a, string b, string c) //n是当前函数里圆盘的个数,a,b,c代表三个圆盘的位置
{
if (n == 1) // 当圆盘数为1时,直接从a移动到b
{
cout << a << "->" << c << endl;
}
else
{
move(n - 1, a, c, b); // 把上面的n-1个圆盘,从a经过c移动到b
cout << a << "->" << c << endl; // 把第n个圆盘从a移动到c
move(n - 1, b, a, c); // 把那n-1块个圆盘,从b经过a移动到c
}
}
void test01()
{
int n = 3;
move(n, "A", "B", "C");
}
int main()
{
test01();
system("pause");
return 0;
}
当圆盘数为3时,程序运行的结果为:
A->C
A->B
C->B
A->C
B->A
B->C
A->C
总结:巧妙利用递归调用自身的特点