对于1~n这n个不同的数,按照一定的顺序把这n个数排列起来(每个数出现一次,且不重复, n<10),将所有的排列列出,称为全排列。
输入格式:
一个数n。
输出格式:
1~n的全排列,每个排列一行(按字典序输出)。
输入样例:
3
输出样例:
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
代码
#include <iostream>
using namespace std;
#define MAX 100
int n, a[MAX], v[MAX];
void dfs(int i)
{
if (i > n)
{
for (int j = 1; j <= n; j++)
{
cout << a[j] << " ";
}
cout << endl;
return;
}
for (int j = 1; j <= n; j++)
{
if (!v[j])
{
a[i] = j; //保存当前选择
v[j] = 1; //标记这个数字,防止同一个排列选择相同的数字。
dfs(i + 1);
v[j] = 0;
}
}
}
int main()
{
cin >> n;
dfs(1);
}