1 条题解

  • 0
    @ 2026-8-3 10:42:49

    题目分析

    本题实际上就是枚举排列问题。

    使用深搜,用 visvis 数组记录是否已经访问,用 gg 数组记录排列内容,当递归层数 =n=n 时将 gg 数组输出即可。

    参考代码(C++)

    #include<bits/stdc++.h>
    using namespace std;
    int n,k;
    bool vis[20];
    int g[20];
    void dfs(int d,int x){
        g[d] = x;
        vis[x] = 1;
        if(d == k){
            for(int i = 1;i<=k;i++)cout<<g[i]<<" ";
            cout<<endl;
            vis[g[k]] = 0;
            return;
        }
        for(int j = 1;j<=n;j++){
            if(!vis[j])
                dfs(d+1,j);
        }
        vis[x] = false;
        return;
    }
    int main(){
        cin>>n>>k;
        for(int i = 1;i<=n;i++){
            dfs(1,i);
            memset(vis,0,sizeof(vis));
        }
        return 0;
    }
    
    • 1

    信息

    ID
    111
    时间
    1000ms
    内存
    256MiB
    难度
    10
    标签
    递交数
    3
    已通过
    1
    上传者