[白準11729]ハノイタワー移動順


https://www.acmicpc.net/problem/11729
1.問題を理解する
これは非常に有名なハノイタワーの移動順序の問題です.
これは白俊の復帰段階の最後の問題だ.
次の2つの概念を理解することが最も重要です.
  • N-1枚の円板は真ん中に移動しなければ最大の円板を一番右に移動できません.!!
  • N=1の場合(オリジナルは1つのみ)、そのままその位置に移動すればよい.
  • この2つのスタイルが頭の中でずっと悩んでいるときは想像できませんが、ある瞬間でしょう!?これで終わりです.そう考えるなら、耳の中の二つの考えが本当に大切だと思います.
    2.ソースコード
    #include<vector>
    #include<iostream>
    #include<stdio.h>
    using namespace std;
    int cnt;
    vector<vector<int>> ans;
    void hano(int n,int f,int b,int t) {
    	if (n == 1) {
    		cnt++;
    		vector<int>sample; sample.push_back(f); sample.push_back(t);
    		ans.push_back(sample);
    	}
    	else {
    		hano(n - 1, f, t, b);
    		vector<int>sample; sample.push_back(f); sample.push_back(t);
    		ans.push_back(sample);
    		cnt++;
    		hano(n-1,b,f,t);
    	}
    }
    int main() {
    	int n;
    	cin >> n;
    	cnt = 0;
    	hano(n, 1, 2, 3);
    	cout << cnt << endl;
    	for (int i = 0; i < ans.size(); i++) {
    		printf("%d %d\n", ans[i][0], ans[i][1]);
    	}
    
    }
    3.思考の答え方
    実際、私が初めてこの問題を考え直したとき、私は、、、および複数の条件文を使用して追跡し、解答しようとしました.
    だから最初はちょっとでたらめだった.
    知人にとっては、これはちょっと難しいので、自分で見て解くのも役に立つので、まず実施形態を見てみました.
    草の中でFは始まりで、Bは通った原版で、Tは到着点原版です.
    これを用いて,頭の中で最大の問題を解き,ifにより,問題が最小の部分に達したとき(n=1のとき)に遷移して最終的に解決する.
    4.得られたTip.
    たくさんの文章を読んだ.もっと高いならハノイのほうが高いです.
    本当に1日ご飯を食べながらYouTubeを見て考えている問題は本当にたくさんのことを学んだ問題ですこの問題では、核心自体が事実回帰である問題を解決する基本的な考え方のようだ.
    最終的に、私の才能は以下のように思います.
    1.最小ユニットでタスクを実行するときにどのような役割を果たすかを決定します.
    2.大問題においてそれを小方向多分岐分割する方法
    この二つの考え方を通して、大きな問題を複数の分岐に分割し続け、最終的に最小の単位になったとき、次に何をするかは天才のようだ.
    古典問題で本当に多くのことを学んだと言われていますが、本当に多くのことを学んだ問題の一つのようです.