分析:
先生成 1 开头的排列, 然后输出 2 开头的排列,,, 最后输出 n 开头的排列
p[1...n] 标记作用, 初始化为 0,
循环 1...n 判断是否取用, 在每一个循环中进行递归, 循环的作用是以 i 开头
- // 生成 1---n 的全排列
- #include<iostream>
- using namespace std;
- int p[100]={0};
- void gcd(int n,int cur,int p[]){
- int i,j;
- if(cur==n){
- for(i=0;i<n;i++) cout<<p[i];
- cout<<endl;
- }
- for(i=1;i<=n;i++){
- int used=0;
- for(j=0;j<=n;j++)
- if(p[j]==i) used=1;
- if(!used) {
- p[cur]=i;
- gcd(n,cur+1,p);
- p[cur]=0;
- }
- }
- }
- int main()
- {
- int n;
- cin>>n;
- gcd(n,0,p);
- }
- View Code
来源: http://www.bubuko.com/infodetail-2976387.html