[C言語]白準11729:ハノイタワー移動順



n開皇后を知るために、練習して追跡してみました.そこでYouTubeでBackTracking講座を探して、復帰練習に回るという結論に達しました.こうしてハノイタワーの練習をしました.

整理する


https://blog.encrypted.gg/943 Baking DogのYouTubeとブログで記事を精読しました.
まず、最も重要なのはまとめ方を考えることです.例えば、最初のドミノの骨牌を倒したら、2番目、3番目、4番目...最後まで気絶する
私たちは普通一つずつ行います.括弧があると次の順番に何を入れたらいいかわかりませんが….このような思想を捨てて、帰納して考えるべきだ.
再びドミノの骨牌1.2.3に戻ります...そうでなければ、k番目のドミノが倒れると、k+1個が倒れ、最後まで倒れる.そう思うべきだ.
ハノイの塔も同じ論理だ.
n基の塔があることを想像してみてください.a,b,cの柱(フィールド)があります.aにはn基の塔があり、cにはn基の塔がある.
では,b場所にn−1,c場所にnを置く.そして残りのb場所のn−1の塔をc場所に移す.終わりました.

コード#コード#

#include <stdio.h>
#include <math.h>

int hanoi(int a, int b, int n)
{
	if (n == 1)
		printf("%d %d\n", a, b);
	else
	{
		hanoi(a, 6 - a - b, n - 1);
		printf("%d %d\n", a, b);
		hanoi(6 - a - b, b, n - 1);
	}
}

int main()
{
	int n;
	int t;
	scanf("%d", &n);
	t = pow(2, n) - 1;
	printf("%d\n", t);
	hanoi(1, 3, n);
}
https://codevang.tistory.com/73ここに詳しい内容があります.
簡単に言えば、n=1の場合、必要であれば1番場所と3番場所で出力して閉じます
n=2の場合、n-1個を2番の場所に移動し、hanoi(a,6-a-b,n-1);nを3番の場所に移動します.if(n=1)は,残りのn−1個を3番場所に移動する.hanoi(6 - a - b, b, n - 1);
もしあなたが分からないなら、ヴィティストに入ってみましょう.
https://www.youtube.com/watch?v=FYCGV6F1NuY&t=379s&ab_channel=%ED%8C%8C%EC%9D%B4%EC%8D%AC%ED%81%B4%EB%9E%98%EC%8A%A4
ビデオでうまく整理されています