版权声明:写的不对不好的地方希望大家能“狠狠地”指出来:) https://blog.csdn.net/qq_37006625/article/details/84930849
全排列
问题描述:
输入一个数n,输出从1~n的全排列
样例输入
3
样例输出
123 132
213 231
321 312
完全没有限制的全排列,那便也用不到剪枝函数
代码
/*
全排列
*/
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
#define MAX_N 10
static int a[MAX_N];
static int flag1 = 0;
static int flag2 = 0;
static int nn;
void print()
{
if(flag1 == 0) ;
else cout <<" ";
for(int i = 0;i < nn;i ++ ){
cout << a[i];
}
}
void dfs(int n)
{
if(n==1){
if(flag2!=0)
cout << endl;
flag1 = 0;
flag2++;
}
if(n == nn){
print();
flag1++;
return;
}
else{
for(int i = n;i < nn;i ++ ){
swap(a[n],a[i]);
dfs(n+1);
swap(a[i],a[n]);
}
}
return;
}
int main()
{
int n;
while(cin >> nn,nn){
memset(a,0,MAX_N);
for(int i = 0;i < nn;i ++ ){
a[i] = i+1;
}
dfs(0);
cout << endl;
flag2 = 0;
}
return 0;
}