C++有专门实现全排列的函数:next_permutation(start,end),这个函数在暴力解决问题方面有很大作用,使用时需要引入头文件algorithm,当当前序列不存在下一个序列时就会结束,若想得到一个序列的全部排列,那么使用前一定要记得先排序
。
int a[]={1,2,3,4};
do{
cout<<a[0]<<' '<<a[1]<<' '<<a[2]<<' '<<a[3]<<endl;
}while(next_permutation(a,a+4));
dfs全排列
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
const int N = 10;
int n, m;
int path[N];
bool visit[N];
void dfs(int u)
{
if(u == n)
{
for(int i = 0; i < n; i++) cout << path[i] << " ";
cout << endl;
return ;
}
for(int i = 0; i < n; i++)
if(!visit[i])//判断有没有访问过
{
path[u] = i + 1;
visit[i] = true;
dfs(u + 1);
visit[i] = false;//注意返回原样
}
}
int main()
{
cin >> n;
dfs(0);
return 0;
}