問題の説明:
ハノイの塔は、以下に示されるように、3つの柱の基部からなるプレート上に配置数によって古代の問題、プレートが異なる全ての直径です。そして、それだけでパイロン上に置くことができるように、プレートは、中央の穴を持っており、すべてのプレートが座席に始まりに過ぎません、パズルの目標は、パイロンの周りから食器を持つことである、パイロンCへの移行、時間がトレイを移動させることができ、そしてトレイがそれよりも小さい任意のプレート上に配置することができるではありません、
リンクします。https://blog.csdn.net/qq_40688338/article/details/84837816
これは明らかに、再帰的なアルゴリズムです。
単におおよそNの皿3つのステップに分けハノイの塔:
中間体パイロンを介して1、N-1は、パイロンBへ初期ターゲットCパイロンのプレートです。
2、パイロンCからターゲットに直接プレート最大下パイロン。
図3に示すように、パイロンBのn-1個のプレートの中間目標パイロンcでパイロン上に置か。、
コードシェア:
パッケージcom.ethjava。 ハノイの//再帰タワーズ /// ** ハノイ問題の// *タワー // * // * @param皿プレート番号(また、名前を表します) 最初のパイロンから// * @param // * @paramの派遣会社のパイロン パイロンをターゲットに// * @param // * / パブリッククラスhahuota { パブリック静的無効メイン(文字列[] args){ hannuota(3、 ""、 "C"、 "B")。 } パブリック静的ボイドhannuota(INT皿、文字列から文字列TEMP、文字列){ IF(皿== 1){ System.out.println(+ +から+に「に」「唯一のプレートから、存在します」)。 }そうしないと{ hannuota(皿 - 1、から、TEMP、に); System.out.println(+する「に対して」+から+「プレートから移動」)。 hannuota(皿 - 1、TEMP、へ、から)。 } } } / * パブリッククラスHanoiTower { パブリック静的ボイドmoveDish(INTレベル、よりチャー、チャー間にCHAR){ IF(レベル== 1){ System.out.println(「から」+ +「移動プレート」から+レベル+「数に」+へ)。 } そうしないと { moveDish(レベル - 1、から、に、インター)。 System.out.println(「から」+ +「移動プレート」から+レベル+「数に」+へ)。 moveDish(レベル - 1、インターへ、から)。 } } パブリック静的無効メイン(文字列[] args){ int型nDisks = 3; moveDish(nDisks、 'A'、 'B'、 'C')。 } } * /
結果:
Cへの唯一のプレート
から移動プレート- 、Bは
BのCから、唯一のプレートであるが
、からの、C皿を動かす
Bからの唯一のプレート、
移動プレートB、からに、C
のみプレートからCへ