ハノイの塔をC#で解く(再帰アルゴリズム)
ハノイの塔
以下のルールに従ってすべての円盤を右端の杭に移動させられれば完成。
出典:André Karwath aka Aka - 投稿者自身による作品, CC 表示-継承 2.5, リンクによる
- 3本の杭と、中央に穴の開いた大きさの異なる複数の円盤から構成される。
- 最初はすべての円盤が左端の杭に小さいものが上になるように順に積み重ねられている。
- 円盤を一回に一枚ずつどれかの杭に移動させることができるが、小さな円盤の上に大きな円盤を乗せることはできない。
n枚の円盤すべてを移動させるには最低 2n − 1 回の手数がかかる。(奥村晴彦『C言語による最新アルゴリズム事典』技術評論社、1991年、216–217頁。ISBN 4-87408-414-1。)
アルゴリズム
GOAL: move n disks from A to C
move n-1 disks from A to B -> 再帰
move disk n from A to C
move n-1 disks from B to C -> 再帰
ソースコード
GitHubにも同じソースコードあり
Hanoi.cs
using System;
class Hanoi {
public void Move(int n, char from, char to, char other) {
if(n >= 1) {
Move(n - 1, from, other, to);
Console.WriteLine("move disk {0} from {1} to {2}.", n, from, to);
Move(n - 1, other, to, from);
}
}
}
class HanoiMain {
public static void Main(string[] args) {
Hanoi hanoi = new Hanoi();
Console.Write("How many disks? ");
int n = int.Parse(Console.ReadLine());
// n枚のdiskをAからCへ移す
hanoi.Move(n, 'A', 'C', 'B');
}
}
実行例(n=3)
こちらから実行可(入力は半角数字)
How many disks? -> 3
move disk 1 from A to C.
move disk 2 from A to B.
move disk 1 from C to B.
move disk 3 from A to C.
move disk 1 from B to A.
move disk 2 from B to C.
move disk 1 from A to C.
Author And Source
この問題について(ハノイの塔をC#で解く(再帰アルゴリズム)), 我々は、より多くの情報をここで見つけました https://qiita.com/probabilityhill/items/187c794ea725f68cb30f著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .