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