WAWA大哭

B3623 枚举排列(递归实现排列型枚举)

Zn50520234188 @ 2024-07-25 14:48:20

#include<iostream>
using namespace std;
int a[15]; //存数 
bool b[15]={0};//记录使用 
int n,k;
void duiwu(int x,int n,int k)
  {
    if(x==k)//够了,该输出了 
      {
        for(int i=0;i<k;i++)
          cout<<a[i]<<" ";
        cout<<endl;
        return;
      }
    for(int i=1;i<=n;i++)
      {
        if(b[i])
          continue;
        int m=0;//判断重复 
        for(int j=0;j<x;j++)
          if(a[j]==i)
            m=1;
        if(m)
          continue;
        a[x]=i;
        b[i]=1;
        duiwu(x+1,n,m);
        a[x]=0;
        b[i]=0;//回溯   
      }
  }
int main()
  {
    cin>>n>>k;
    duiwu(0,n,k);
    return 0;
  }

by Needna @ 2024-07-25 15:08:27

for(int i=1;i<=n;i++) { if(b[i]) continue; int m=0;//判断重复 for(int j=0;j<x;j++) if(a[j]==i) m=1; if(m) continue; a[x]=i; b[i]=1; duiwu(x+1,n,m); a[x]=0; b[i]=0;//回溯 这个写麻烦了 你看看这样写?for(int i=1;i<=c;i++) { if(d[i]==0) { d[i]=1; b[p]=i; fun(p+1); d[i]=0; } } d是判断重复使用的


by Needna @ 2024-07-25 15:09:47

这个是不太好看 你自己换个行看看


by yinzexuan @ 2024-07-26 09:34:28

大佬这格式……


by turing_IK @ 2024-07-29 11:17:39

@Zn50520234188

#include<bits/stdc++.h>
using namespace std;
int n,r,a[25]={1};
bool b[25];
void dfs(int step)
{
    for(int i=1;i<=n;i++)
    {
        if(b[i]==0)
        {
            a[step]=i;
            b[i]=1;
            if(step==r)
            {
                for(int j=1;j<=r;j++)
                {
                    cout<<a[j]<<" ";
                }
                cout<<endl;
            }
            else
            dfs(step+1);
            b[i]=0;
        }
    }
}
int main()
{
    cin>>n>>r;
    dfs(1);
    return 0;
}

和p1157差不多


by yunyu2 @ 2024-08-03 11:25:13

#include <bits/stdc++.h>
using namespace std;

int n, k;
int a[15], use[15];

void dfs(int pos) {
    if(pos==k+1) {
        for(int i=1; i <= k; i++)
            cout <<a[i]<< ' ';
        cout << endl;
        return;
    }
    for(int i=1;i<=n;i++)
        if(!use[i]) 
        { // 如果第 i 个元素没有被使用
            use[i]=1; // 将其标记为被使用
            a[pos]=i; // 更新 a[pos]
            dfs(pos+1); // 枚举下一个
            use[i]=0; // 将其标记为未被使用
        }
}

int main() {
    cin >> n >> k;
    dfs(1);
    return 0;
}

@Zn50520234188


|