算法1
dfs
通常的dfs做法
C++ 代码
#include <iostream>
#include <algorithm>
using namespace std;
int n, temp[10];
bool vis[10];
void dfs(int cnt)
{
if(cnt == n)
{
for(int i = 0; i < cnt; i ++)
cout << temp[i] << " ";
cout << endl;
return;
}
for(int i = 1; i <= n; i ++)
{
if(vis[i]) continue;
vis[i] = true;
temp[cnt] = i;
dfs(cnt + 1);
vis[i] = false;
}
}
int main()
{
cin >> n;
dfs(0);
return 0;
}
算法2
调用C++ algorithm 里面的API
next_permutation(begin, end)
将当前排列变为 (按字典序) 下一个全排列
prev_permutation(begin, end)
将当前排列变为 (按字典序) 上一个全排列
其实还可以自定义比较函数,功能强大,有待开发…
cppreference
C++ 代码
#include <iostream>
#include <algorithm>
using namespace std;
int main()
{
int n;
cin >> n;
int a[] = {1, 2, 3, 4, 5, 6, 7};
do{
for(int i = 0; i < n; i ++) cout << a[i] << " ";
cout << endl;
}while(next_permutation(a, a + n));
return 0;
}