这个模板呢可以应用于许多地方,例如:一串字符的全排列;或者给你一段字符或者数字,然后让你找到一组或者多组满足特定要求的 排列;给你一组数, 然后让你求相邻两个数有特定关系的排列:等等许多类似的问题都可以通过下面这个求解n个数的全排列代码 来改变,可以都过添加以下函数,或者修改一下dfs 的 一些条件;
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int arr[30]; //存放 将要输出的 排列
int vis[30]; // 标记数组
void dfs(int step, int n, int num)
{
arr[step] = num;
if(step == n)
{
for(int i = 1; i <= n; i++)
printf("%d ", arr[i]);
putchar('\n');
}
for(int i = 1; i <= n; i++)
{
if(!vis[i])
{
vis[i] = true;
dfs(step+1, n, i);
vis[i] = false;
}
}
}
int main()
{
int n;
while(scanf("%d", &n) != EOF)
{
memset(vis, false, sizeof(vis));
dfs(0, n, 0);
}
return 0;
}