思路:通过DFS实现。DFS本质通过递归,首先填写第一个位置,填完之后递归填写第二个,直到填写不下,即代码中(x > n),此时回溯,寻找倒数第二个位置还有没有别的数可以填写,不停回溯,从倒数第一位回溯到第一位,直到所有情况全部排列。
#include<iostream>
#include<algorithm>
using namespace std;
int n;
int g[8];
bool st[8];
void dfs(int x)
{
if(x > n)
{
for(int i = 1;i <= n;i ++)
{
cout << g[i] << ' ';
}
cout << endl;
}
for(int i = 1;i <= n;i ++)
{
if(!st[i]){
g[x] = i;
st[i] = true;
dfs(x + 1);
st[i] = false;
}
}
}
int main()
{
cin >> n;
dfs(1);
return 0;
}