分析:
先生成1开头的排列,然后输出2开头的排列,,,最后输出n开头的排列
p[1...n] 标记作用,初始化为0,
循环 1...n判断是否取用,在每一个循环中进行递归,循环的作用是以i开头
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
//生成 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); }