3本の柱 A, B, C があり、柱 A に N 枚の円盤が小さい順(上が小さい)に積まれています。これをすべて柱 C へ移してください。ルールは次の2つです。
最小手数で移すときの手順を、1手ずつ X->Y の形(例 A->C)で1行ずつ出力してください。
円盤の枚数 N が与えられます。動かす手順を上から順に1行ずつ出力してください(全部で 2^N − 1 行)。
| 入力 | 出力 |
|---|---|
1 | A->C |
2 | A->B |
N-1 枚を A から B へ移すA->C を出力)N-1 枚を B から C へ移すfrom=今ある柱、to=行き先、via=経由):
void hanoi(int n, char from, char to, char via) {
if (n == 1) { cout << from << "->" << to << endl; return; }
hanoi(n - 1, from, via, to); // ① N-1枚を via へ
cout << from << "->" << to << endl; // ② 一番下を to へ
hanoi(n - 1, via, to, from); // ③ N-1枚を to へ
}
main から hanoi(n, 'A', 'C', 'B'); と呼び出します。