1 条题解

  • 0
    #include <iostream>
    #include <cstring>
    #include <iomanip>
    using namespace std;
    const int maxn=1e6+10;
    int n;
    bool vis[maxn];
    int ans[maxn];
    void dfs(int dep){
    	//终止条件+输出 
    	if(dep==n+1){
    		for(int i=1;i<dep;i++){
    			cout<<setw(5)<<ans[i];
    		}
    		cout<<endl;
    	}
    	//枚举方案数 
    	for(int i=1;i<=n;i++){
    		//标记防止重复搜索 
    		if(!vis[i]){
    			vis[i]=1;//标记 
    			ans[dep]=i;//搜索当前层 
    			dfs(dep+1);//进入下一层 
    			vis[i]=0;//回溯,还原相关状态 
    		}
    	}
    }
    int main(){
    	cin>>n;
    	dfs(1);
    	return 0;
    }
    
    • 1

    信息

    ID
    2275
    时间
    1000ms
    内存
    256MiB
    难度
    3
    标签
    递交数
    100
    已通过
    52
    上传者