1- n , n個數的全排列(dfs)
阿新 • • 發佈:2018-12-24
這個模板呢可以應用於許多地方,例如:一串字元的全排列;或者給你一段字元或者數字,然後讓你找到一組或者多組滿足特定要求的 排列;給你一組數, 然後讓你求相鄰兩個數有特定關係的排列:等等許多類似的問題都可以通過下面這個求解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;
}