自写排列函数
自写排列函数

自写排列函数

#include<bits/stdc++.h>
using namespace std;
int a[20] = {1,2,3,4,5,6,7,8,9,10,11,12,13};
bool vis[20]; //记录第i个数是否用过
int b[20]; //生成的一个全排列
void dfs(int s,int t){
if(s == t) { //递归结束,产生一个全排列
for(int i = 0; i < t; ++i) cout << b[i] << " "; //输出一个排列
cout<<endl;
return;
}
for(int i=0;i<t;i++)
if(!vis[i]){ //排列按照顺序修改
vis[i] = true; //锁住数字
b[s] = a[i]; //存放排列
dfs(s+1,t); //递归
vis[i] = false; //递归结束解开
}
}
int main(){
int n = 3;
dfs(0,n); //前n个数的全排列
return 0;
}

笔记:递归后for循环也是需要遍历的,vis[]是锁住前面的排序数字,递归修改后边的排序数字

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注