AcWing 842. 排列数字
原题链接
简单
作者:
minux
,
2020-04-25 22:37:43
,
所有人可见
,
阅读 410
位运算判状态
#include <bits/stdc++.h>
using namespace std;
// 全排列问题
const int N=12;
int used;
int res[N];
int n;
void dfs(int index){
if(index==n){
for(int i=0; i<index; ++i) cout<<res[i]<<" ";
cout<<endl;
return;
}
for(int i=1; i<=n; ++i){
if(!(used&(1<<i))){
used+=1<<i;
res[index]=i;
dfs(index+1);
used-=1<<i;
}
}
}
int main(){
cin>>n;
memset(res, 0x00, sizeof res);
used=0x00;
dfs(0);
return 0;
}
vector容器实现
#include <bits/stdc++.h>
using namespace std;
// 全排列问题
int n;
vector<vector<int>> res;
vector<bool> used;
void dfs(int index, vector<int>& vec){
if(index==n){
res.push_back(vec);
}
for(int i=1; i<=n; ++i){
if(!used[i]){
used[i]=true;
vec.push_back(i);
dfs(index+1, vec);
used[i]=false;
vec.pop_back();
}
}
}
int main(){
cin>>n;
res.clear();
used = vector<bool>(n, false);
vector<int> vec;
dfs(0, vec);
for(auto &v: res){
for(auto &e: v){
cout<<e<<" ";
}
cout<<endl;
}
return 0;
}
数组实现
#include <bits/stdc++.h>
using namespace std;
// 全排列问题
const int N=12;
bool used[N];
int res[N];
int n;
void dfs(int index){
if(index==n){
for(int i=0; i<index; ++i) cout<<res[i]<<" ";
cout<<endl;
return;
}
for(int i=1; i<=n; ++i){
if(!used[i]){
used[i]=true;
res[index]=i;
dfs(index+1);
used[i]=false;
}
}
}
int main(){
cin>>n;
memset(res, 0x00, sizeof res);
memset(used, 0x00, sizeof used);
dfs(0);
return 0;
}