题目描述
我们称n的全排列1,2,3...,n按照一定顺序组成的序列
比如3的所有全排列为:
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
现在请你生成n的所有全排列
输入格式
第一行一个整数n
输出格式
输出所有n的全排列,按字典序从小到大输出。
字典序比较大小方法为从第一个数字开始比较,若不同则比较出来大小,否则接着比较第二位,直到比较出来大小位置。样例中就是按照字典序排序后的结果。
样例
输入
3
输出
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
数据范围与提示
1 <= n <= 8
#include<iostream>
#include<algorithm>
using namespace std;
void show(int list[],int n)
{
for(int i=0;i<n-1;i++)
{
printf("%d ",list[i]);
}
printf("%d\n",list[n-1]);
}
int hash_map[8]={0};
int b[8]={0};
int j=0;
void my_next_perm(int list[],int n)
{
for(int i=0;i<n;i++)
{
for(;hash_map[i]==1;i++);
if(i !=n)
{
hash_map[i]=1;
b[j++]=list[i];
if(j==n) show(b,n);
my_next_perm(list,n);
j--;
hash_map[i]=0;
}
}
}
int main()
{
int list[8]={1,2,3,4,5,6,7,8},n;
while(cin>>n) {
my_next_perm(list,n);
}
return 0;
}