题解(有注释)
2023-11-05 11:19:21
发布于:江苏
23阅读
0回复
0点赞
#include<iostream>
using namespace std;
int n;
bool vis[10];//vis[i]:标记数字i是否被使用
int num [10];//num[i]:选中的第i个数字
//输出1-n的全排列
//先选出第t个数字,再对n-t个数字进行全排列
void dfs(int t){
if ( t > n ){
//输出结果
for (int i = 1;i < n;i++){
cout << num[i] << " ";
}
cout << num[n];
cout << endl;
return;
}
for(int i = 1;i <= n;i++){ //第t个数字有n个选择
if ( !vis[i] ) { //如果数字1未被选择
num[t] = i;//选中的数字i为第t个数字
vis[i] = 1;//并标记
dfs(t+1);//继续选择第t+1到第n个数字
vis[i] = false;//回溯,恢复还未选择第t个数时的状态
}
}
}
int main(){
cin >> n;
dfs(1);
return 0;
}
这里空空如也
有帮助,赞一个