ハノイの塔の問題についてです。1~10までの数字でそれぞれ出力されるプログラムを作ります。
5のときの例です。
01234 ..... .....
.1234 ..... ....0
..234 ....1 ....0
..234 ...01 .....
...34 ...01 ....2
..034 ....1 ....2
..034 ..... ...12
...34 ..... ..012
一部ですが,表示が上記のようになるようにしたいです。
2の時ですが
01 .. ..
.1 0. ..
.. 0. .1
.. .. 01
と表示されてしまいます。
01 .. ..
.1 .0 ..
.. .0 .1
.. .. 01
これが正しい結果です。
途中過程の出力が上手くいきません。何か回答いただけると嬉しいです。コードは貼っています。よろしくお願いします。
コード#include <stdio.h> char col[3][10]; void Hanoi(int n, int a, int b, int c){ if(n>1){ Hanoi(n-1, a, c, b); } int f; f=col[a][n-1]; int d; for(d=0;d<n;d++){ col[a][d]='.'; } int e; for(e=0;e<n;e++){ col[c][e]='.'; } col[c][n-1]=f; printf("%s %s %s\n", col[0], col[1], col[2]); if(n>1){ Hanoi(n-1, b, a, c); } } int main(void){ int n; scanf("%d", &n); int i; for(i=0;i<n;i++){ col[0][i]='0'+i; col[1][i]='.'; col[2][i]='.'; } printf("%s %s %s\n", col[0], col[1], col[2]); Hanoi(n, 0, 1, 2); return 0; }
このプログラムでは円盤の移動ができないような気がします。
移動するのは一番上の円盤です。そのためには、一番上の円盤の位置を別途記録しておくか、その都度検索する必要があります。
移動するときに、検索しているようにはみえないのですが。
ご指摘ありがとうございます。
コードを上記のように変更した結果、一番上の円盤が動くようになったのですが出力が上手くいきませんでした。どうすればよいか意見いただけると嬉しいです。
多分このままのやり方ではダメです。
えっと、どうしましょうか?
そのものズバリの回答が欲しければ、つい最近同じような質問がありました。
私も回答していますが、私の方法はちょっと違うので、余り参考にならないと思います。
別の回答者の方 (shiracamus さん) の回答が参考になるのでは無いかと思います。
もし、自分で考えたいというのであれば、ヒントだけにします。
現状では、円盤の位置が変わってないです(中に浮いている)。
'.' は円盤がない状態ですので、それを検索していけば、一番上の円盤が見付かります。また、移動する先も '.' を検索していくことで、移動すべき位置がわかります。
自分で考えてみたいのですが、全く何をすればいいかわかりません。もう少しヒントをいただけると嬉しいです。
> 1~10までの数字でそれぞれ出力されるプログラムを作ります。
0~9 ではないのですか?
回答4件
あなたの回答
tips
プレビュー