标题
递归实现排列型枚举
题目链接
题意:
- 把数字n,从1到n个整数分别组成一个n位数,每个数字都要用且不能重复
思路:
- 设置一个bool函数来判断是否用过这个函数
- 再设置一个数组来装每个判断以后选择的数
- 用void函数来设置判断,当u>i时,就可以输出之前判断好的所有数字
- 设置判断的两个分支,一个分支是选这个数字,判断数组就是ture,就选了这个数字,然后输出的数组序号加一另外一个分支就是不选择这个,存数字的就清空,再让选择数组等于false代表依旧没有选择,接下来就有很多个分支;
#include<iostream>
#include<algorithm>
using namespace std;
int n;
bool use[50];//判断是否使用过
int a[50];//用来存数字
void b(int u){
if(u>n){
for(int i=1;i<=n;i++){
cout<<a[i];
}
cout<<endl;
return ;
}
for(int i=1;i<=n;i++){
if(use[i]==false){ //如果这个数字没被使用过
b[u]=i;;
use[i]=true;
b[i+1];
//设置两个分支一个是选一个是不选
//不选就清空选择的
a[u]=0;
use[i]==false
}
}
}
int mian(){
cin>>n;
b[1];
return 0;
}
总结:
- 可以先画分叉的图,利于理解;