欢迎各位大神来这里讨论,发题解

速发解
欢迎各位大神来这里讨论,发题解

1 条评论

  • @ 2025-5-25 15:01:19
    #include<bits/stdc++.h>
    using namespace std;
    int a[100], book[10], n, ans = 0;
    void dfs(int place)
    {
        for(int i = 1; i <= n; ++i) {
            if(book[i] == 0) { //数字i没放入
                a[place] = i; //把i放入第place个盒子
                book[i] = 1; //标记
                dfs(place + 1); //递归下一个盒子
                book[i] = 0; //取消标记
            }
        }
        if(place == n + 1) {//到达最后一个盒子的下一个
            ans++; //总共的可能
            for(int i = 1; i <= n; ++i)
                cout<<a[i]<<" ";
            cout<<endl;
            return; //返回上一个盒子(最近一次调用dfs的地方)
            //return可去
        }
    }
    int main()
    {
        cin>>n;
        dfs(1); //从第一个盒子开始
        cout<<ans<<endl;
        return 0;
    }
    
    • 1