- 締切済み
ハノイ塔の非再帰について
VBでハノイの塔(非再帰)で作りたいのですが、 考え方がまったくわかりません。 ハノイの塔(非再帰)をVBで作った事のある方、 良ければ基本的な考え方を教えてください。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
ハノイの塔を作るというのは手順を書き出すと言うことでしょうか? 既に立派な回答がありますが、 円盤を2枚動かす手順を書き出すfunctionをつくり、 3枚動かす手順を書き出すfunctionをつくり 4枚動かす手順を書き出すfundtionをつくり....... というような感じですかね。 余計なお世話ですが、 大体何枚くらいの、円盤を想定していらっしゃるのでしょうか? 64枚分を目指していらっしゃるとか?
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
作ったことはないのですが、 それぞれの部分の周期性に着目するとできると思います。 以下の部分を見て下さい。 以下の部分は、5枚の板をA,B,CのAからBに移動させる手順です。 ---------------------------------------------------------------- No.1 DISC:A->B No.2 DISK:A->C No.1 DISC:B->C No.3 DISK:A->B No.1 DISC:C->A No.2 DISK:C->B No.1 DISC:A->B No.4 DISK:A->C No.1 DISC:B->C No.2 DISK:B->A No.1 DISC:C->A No.3 DISK:B->C No.1 DISC:A->B No.2 DISK:A->C No.1 DISC:B->C No.5 DISK:A->B No.1 DISC:C->A No.2 DISK:C->B No.1 DISC:A->B No.3 DISK:C->A No.1 DISC:B->C No.2 DISK:B->A No.1 DISC:C->A No.4 DISK:C->B No.1 DISC:A->B No.2 DISK:A->C No.1 DISC:B->C No.3 DISK:A->B No.1 DISC:C->A No.2 DISK:C->B No.1 DISC:A->B 31 手 ---------------------------------------------------------------- コレを見ると、奇数板はA→B→C回り偶数板はA→C→B回り(奇数枚数の板をAからBに移すとき)で 1:1つ置き 2:3つ置き 3:7つ置き 4:15置き になっていることがわかります。 つまり、あるn番目の板を動かすには、それ以前のn-1の板を先に動かす必要があるので ・前もって動かす手順 ・自分を動かす手順 ・残りを動かす手順(つまり前もって動かす手順と同じ) になることがわかります。 なので、 n番目の板:{(n-1)の周期的出現数}×2+1=nの周期的出現数 になること 及び、 初めて出現する位置:前の(n-1)板の手順が終わった時=(n-1)の周期的出現数 になっていることがわかります。 また、 n枚の板を移動完了させるのに必要な手数は {(n-1)の周期的出現数}×2+1 になることがわかります。 以上のことから、 n枚の塔を移動させる時の総手数と、それぞれの板を移動させる向きとタイミングがわかりますから、プログラミングできると思います。
お礼
詳しい解説ありがとうございます。 この説明をもとに一度作成してみます。