问题描述
输出自然数1到n所有不重复的排列,即n的全排列,要求所产生的任一数字序列中不允许出现重复的数字。
输入格式
n(1≤n≤9)
输出格式
由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;
int n;
int arr[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9};
int outArr[10];
int outIndex = 0;
int vis[10];
void dfs(int ith) {
if (n == ith) {
for (int i = 0; i < n; ++i) {
cout << outArr[i] << " ";
}
cout << endl;
}
for (int i = 0; i < n; ++i) {
if (vis[i] == 0) {
vis[i] = 1;
outArr[outIndex++] = arr[i];
dfs(ith + 1);
--outIndex;
vis[i] = 0;
}
}
}
int main() {
cin >> n;
dfs(0);
return 0;
}