回溯之全排列
阿新 • • 發佈:2019-01-04
全排列
問題描述:
輸入一個數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;
}