这道题的思路是什么?

5 条评论

  • #include<bits/stdc++.h>
    using namespace std;
    int n;
    char a, b, c;
    void f(int n, char a, char b, char c) {
    	if (n == 1) {
    		cout << a << "->" << n << "->" << b << endl;
    		return;
    	}
    	f(n - 1, a, c, b); //将n-1个盘子从a移动到c(借助b)
    	cout << a << "->" << n << "->" << b << endl;
    	f(n - 1, c, b, a); //将n-1个盘子从c移动到b(借助a)
    }
    int main() {
    	cin >> n >> a >> b >> c;
    	//将n个盘子从a移动到b(借助c)
    	f(n, a, b, c);
    	return 0;
    }
    
    
    
    • 这是错的

      • using namespace std;
        int n;
        void DFS(int x, int from, int to) {
        	if (x == 1) {
        		cout << 'A' + from - 1 << 'A' + to - 1;
        		return;
        	}
        	int as = 6 - from - to;
        	DFS(x - 1, from, as);
        	DFS(1, from, to);
        	DFS(x - 1, as, to);
        	return;
        }
        int main() {
        	scanf("%d", &n);
        	DFS(n, 1, 3);
        	return 0;
        }
        
        
        • @ 2025-12-18 19:12:18

          a -> n-1 -> c a -> n -> b c -> n-1 -> b

          • @ 2025-12-1 19:24:10

            递归

            • 1

            信息

            ID
            207
            时间
            ms
            内存
            MiB
            难度
            2
            标签
            递交数
            312
            已通过
            96
            上传者