关于1~n排序问题

来源:互联网 发布:新东方英语网络教学 编辑:程序博客网 时间:2024/06/06 09:11

我开始不会,多看了刘大大的数书几遍后,领悟一点。

大致的思路是:

拿 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.csdn.net/qq_35283188/article/details/75666540;




原创粉丝点击