简洁易懂带注释题解
2026-02-10 11:20:57
发布于:上海
4阅读
0回复
0点赞
这是到模版题,要注意的是需要加一个bool类型的use数组,用来存储当前数在此排列的前几个数中是否出现过,其余改动不大
#include<bits/stdc++.h>
using namespace std;
int n, num[20];
bool use[20];
void dfs(int k){
if(k == n + 1){//当前排列个数已满
for(int i = 1; i <= n; i++){
cout << num[i];
if(i == n){
cout << endl;
}else{
cout << " ";
}
}
return;
}
for(int i = 1; i <= n; i++){
if(!use[i]){//当前数在此排列前几项未出现的情况
use[i] = 1;
num[k] = i;
dfs(k + 1);
use[i] = 0;//回溯,以免下一排列无法正确遍历
}
}
}
int main(){
cin >> n;
dfs(1);
return 0;
}
全部评论 1
制作不易,留赞后去
2026-02-10 来自 上海
0






有帮助,赞一个