【アルゴリズム日記】ハノイの塔の再帰的実現

問題の説明
ハノイの塔:ハノイの塔(ハノイの塔とも呼ばれます)は、インドの古代の伝説に由来する教育玩具です。ブラフマが世界を創造したとき、彼は3本のダイヤモンドの柱を作り、1本の柱に64枚の黄金の円盤を下から上にサイズ順に積み上げました。ブラフマーはブラフミンに、円盤を下から別の柱に大きさ順に並べ直すように命じました。また、小さなディスク上でディスクを拡大することはできず、3つの柱の間で一度に移動できるディスクは1つだけであると規定されています。(つまり、小さなプレートは大きなプレートの上にある必要があり、一度に移動できるのは1つのプレートだけです。最後に、Aより上のすべてのプレートがCに移動されます)。
ここに画像の説明を挿入

考え:現在2つのプレートがあると仮定すると、小さなプレートを直接AからBに移動し、次に大きなプレートをAからCに移動し、最後に小さなプレートをBからCに移動できます。実際、64枚のプレートは同じです。上部の63枚のプレートは全体として考えることができます。最初に63枚のプレートをAからBに移動し、次に下部のプレートをAからCに移動してから、63枚のプレートをBからCに移動します。63プレートを移動する方法は?上記の62を全体として考えます。類推によれば、それは実際には、最も単純なケースに至るまで、再帰です。

#include <cassert>
using namespace std;
#define length 3
#include<iostream>
using namespace std;
int main()
{
	void hanoi(int n, char one, char two, char three);
	int m;
	cout << "输入盘子数:";
	cin >> m;;
	hanoi(m, 'A', 'B', 'C');
}


void hanoi(int n, char one, char two, char three)
{
	void move(char x, char y);
	if (n == 1)
	{
		move(one, three);//递归结束条件。此时只有一个盘子
	}
	else
	{
		hanoi(n - 1, one, three, two);//将上面n-1个盘子从A移动到B,(可以借助C)
		move(one, three);//输出
		hanoi(n - 1, two, one, three);将上面n-1个盘子从B移动到C(借助A)
	}
}

おすすめ

転載: blog.csdn.net/wdxyxshark/article/details/108713359