1 条题解

  • 0
    @ 2025-6-8 15:58:22
    #include <bits/stdc++.h>
    using namespace std;
    int perm[10];
    bool used[10]={false};
    int n;
    void dfs(int step){
        if (step==n){
            for (int i=0;i<n;i++){
                cout.width(5);
                cout<<perm[i];
            }
            cout<<endl;
            return;
        }
        for (int i=1;i<=n;i++){
            if (!used[i]){
                used[i]=true;
                perm[step]=i;
                dfs(step+1);
                used[i]=false;
            }
        }
    }
    int main(){
        cin>>n;
        dfs(0);
        return 0;
    }
    
    • @ 2025-6-8 15:59:06
      #include <iostream>
      using namespace std;
      
      // 定义一个数组来保存当前排列
      int perm[10]; // n最多可能是9,所以开10的空间
      bool used[10] = {false}; // 标记数字是否已使用
      int n; // 输入的n
      
      // 用递归生成全排列(简单版,适合理解)
      void dfs(int step) {
          if (step == n) { // 当填满n个数字时,输出结果
              for (int i = 0; i < n; i++) {
                  cout.width(5); // 每个数字占5个字符宽度,右对齐
                  cout << perm[i];
              }
              cout << endl; // 换行
              return;
          }
          // 尝试用1到n的每个数字
          for (int i = 1; i <= n; i++) {
              if (!used[i]) { // 如果数字i还没被用过
                  used[i] = true; // 标记为已用
                  perm[step] = i; // 放在当前位置
                  dfs(step + 1); // 递归填下一个位置
                  used[i] = false; // 取消标记,回溯
              }
          }
      }
      
      int main() {
          cin >> n;
          dfs(0); // 从第0个位置开始填数
          return 0;
      }
      
  • 1

信息

ID
265
时间
1000ms
内存
256MiB
难度
9
标签
递交数
12
已通过
4
上传者