#include<iostream>
using namespace std;
int vst[10],n,result[20]; //vst是标记是否使用过该数字,n是输入,result存储结果
void print(){ //单独的输出函数
for(int i=1;i<=n;i++){ //输出n个数的全排列结果
cout<<" "<<result[i];
}
cout<<endl;
}
void dfs(int num){ //【此注释一定要看】num代表的是现在正在排列第n位数
if(num==n+1){ //为什么要n+1?在第n次的时候,还在排列最后一位数。只有n+1时,才是排列结束的结果
print();
return;
}
for(int i=1;i<=n;i++){ //分别尝试范围内的数是否满足条件
if(vst[i]==0){ //需判断的条件:数字没有被使用过
result[num]=i; //存储排列结果
vst[i]=1; //标记此数字已使用
dfs(num+1); //dfs深搜
vst[i]=0; //标记此数字未使用
}
}
}
int main(){ //main没有必要解释。。。
cin>>n;
dfs(1);
return 0;
}
c++全排列(n!)
最新推荐文章于 2024-01-18 08:39:01 发布