我开始不会,多看了刘大大的数书几遍后,领悟一点。
大致的思路是:
拿 1 2 3 为例
把每一个数都做为排头一次后面的数开始变化排列,
比如 1为排头, 2 3 排列。
易知 2可作为当前的排头,后面的数依次是这样、
还没完 这才1刚刚结束 即一层递归结束。
后面的就重复上述步骤即可。
#include<iostream>
using namespace std;
void print_permutation(int n, int* a,int cur)
{
if(cur == n){
for(int i=0 ;i<n;i++) printf("%d",a[i]);
printf("\n");
}
else for(int i=1;i<=n;i++){
int ok=1;
for(int j=0;j<cur;j++)
if(a[j]==i) ok=0;
if(ok) {
a[cur]=i;
print_permutation(n,a,cur+1);
}
}
}
int main(){
int n=3;
int a[5];
for(int i=0;i<3;i++)
cin>>a[i];
int cur=0;
print_permutation(n,a,cur);
}
这是可重排列的传送门:http://blog.youkuaiyun.com/qq_35283188/article/details/75666540;