【问题描述】
1到n的指的一个全排列指的是1到n这n个数的组合。
比如1的3的一个全排列是1 3 2,所有的全排列为:
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
输入
输入一个整数n(n<=5)
输出
输出n的所有全排列,一个排列占一行,按照从小到大的顺序
样例输入
2
样例输出
1 2
2 1
【代码实现】
#include<iostream>
using namespace std;
int n;
int a[100],b[100];
void DFS(int k)
{
//k表示现在开头的是哪一个数字
if(k==n+1)
{
for(int i=1;i<=n;i++)
{
cout<<a[i]<<" ";
}
cout<<endl;
return;
}
//此时在第k个数面前,应该放什么数? 依次遍历
for(int i=1;i<=n;i++)
{
//该数字是否被使用过
if(b[i]==0)
{
a[k]=i;
b[i]=1; //该数字已被使用
//放好第k个数字后,往后遍历下一个数字
DFS(k+1);
b[i]=0; //恢复状态,表示未被使用,下次遍历还可以使用
}
}
return ;
}
int main()
{
cin>>n;
DFS(1);
return 0;
}