总起
c++全排列,简单易懂
递归解法
题目
描述
有 1∼n 这 n(n<10)个数,现将这 n 个数组成一个 n 位的数,每个数只能用一次,例如 n=2,则 12,21等都是符合条件的数,但 11 和 22 不行。问,输入 n 后,将符合条件的所有的 n 位数输出,且按照从小到大顺序输出。
输入描述
一个正整数 n。
输出描述
按从小到大输出所有的全排列数,每行一个数(中间用空格隔开)。
样例输入
2
样例输出
1 2
2 1
代码
#include <bits/stdc++.h>
using namespace std;
int n,vis[101],a[101];
void P(int m){
if(m == n+1){
for(int i=1;i<=n;i++){
cout<<a[i]<<' ';
}
cout<<endl;
}
for(int i=1;i<=n;i++){
if(vis[i]==0 && i!=a[m-1]){
a[m]=i;
vis[i]=1;
P(m+1);
vis[i]=0;
}
}
}
int main(){
cin>>n;
P(1);
return 0;
}