题目描述
把 1~n 这 n 个整数排成一行后随机打乱顺序,输出所有可能的次序。
只想说一点,详见代码注释
样例
3
1 2 3
1 3 2
2 1 3
2 3 1
3 1 2
3 2 1
C++ 代码
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N = 9;
int st[N];
bool used[N];
int n;
void dfs(int u)
{
if(u == n)
{
for(int i = 0; i < n; i++)
{
cout<<st[i]<<" ";
}
cout<<endl;
return;
}
for(int i = 0; i < n; i++)
if(!used[i])
{
st[u] = i+1; //cout<<"st["<<u<<"]:"<<st[u]<<endl;
used[i] = true;
dfs(u+1); //此处用"++u"会导致u的值改变,下一步恢复现场的指向对象出错
st[u] = 0; //cout<<"st["<<u<<"]:"<<0<<endl;
used[i] = false;
}
}
int main()
{
cin>>n;
dfs(0);
return 0;
}