3 条题解

  • 2
    @ 2022-7-14 16:45:40
    using namespace std;
    int n;
    int a[100],b[100];
    void f()
    {
        for(int i=1;i<=n;i++)
        printf("%d",b[i]);
        cout<<endl;
    }
    void dfs(int x)
    {
        if(x==n) 
        {
            f();
            return;
        }
        for(int i=1;i<=n;i++)
        {
            if(!a[i])
            {
                a[i]=1;
                b[x+1]=i;
                dfs(x+1);
                a[i]=0;
            }
        }
    }
    int main()
    {
        cin>>n;
        dfs(0);
        return 0;
    }
    `
    
    • 0
      @ 2023-11-11 9:03:50
      using namespace std;
      int a[100],book[100],n;//a为存放数的数组,book为手中有的牌,n为牌的数量 
      void dfs(int step){
      	if(step==n+1){//当排列的数超出了牌的数量时结束排列 
      		for(int i=1;i<=n;i++) cout<<a[i];//输出此数 
      		cout<<endl;//换行 
      		return;//返回 
      	}
      	for(int i=1;i<=n;i++){
      		if(book[i]==0){//判断这个数是否还在 
      			a[step]=i;//如果不在放入a数组中 
      			book[i]=1;//将此张牌设为已放入 
      			dfs(step+1);//继续排列 
      			book[i]=0;//将此牌收回 
      		}
      	}
      	return;//返回 
      }
      int main(){
      	cin>>n;//输入牌的数量 
      	dfs(1);//函数运算 
      	return 0;
      }
      
      • 0
        @ 2023-4-5 19:08:54
        #include<bits/stdc++.h>
        using namespace std;
        int a[10001],wsh[10001];
        int n;
        void dfs(int step) {
        	if(step==n+1) {
        		for(int i=1; i<=n; i++) {
        			cout<<a[i];
        		}
        		cout<<endl;
        		return ;
        	}
        	for(int i=1; i<=n; i++) {
        		if(wsh[i]==0) {
        			a[step]=i;
        			wsh[i]=1;
        			dfs(step+1);
        			wsh[i]=0;
        		}
        	}
        	return ;
        }
        int main() {
        	cin>>n;
        	dfs(1);
        	return 0;
        }
        
        • 1

        信息

        ID
        1305
        时间
        1000ms
        内存
        256MiB
        难度
        6
        标签
        递交数
        214
        已通过
        70
        上传者