参考代码: 使用dfs深搜一下,避免重复,S[i]保存后将vis设为true,dfs结束取消vis标记;位数够了就输出。
#include <cmath>
#include <cstdio>
#include <string>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
int n, S[11];
bool vis[11];
void dfs(int x)
{
if(x > n)
{
for(int i = 1; i <= n; i++) printf("%5d", S[i]);
cout << endl; return;
}
for(int i = 1; i <= n; i++)
{
if(vis[i]) continue;
S[x] = i; vis[i] = true;
dfs(x + 1); vis[i] = false;
}
}
int main()
{
cin >> n;
dfs(1);
return 0;
}
参考代码2.0: 利用algorithm库的全排列函数next_permutation();和sort()函数用法相似,找到一个排列返回true,否则返回false,记得把第一次的先输出;
#include <cmath>
#include <cstdio>
#include <string>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
int n, S[11], j = 1;
int main()
{
cin >> n;
for(int i = 0; i < n; i++) S[i] = i + 1;
for(int k = 0; k < n; k++) cout <<" "<< S[k];
cout << endl;
while(next_permutation(S, S + n))
{
for(int k = 0; k < n; k++) cout <<" "<< S[k];
cout << endl;
}
return 0;
}