1. 程式人生 > >1- n , n個數的全排列(dfs)

1- n , n個數的全排列(dfs)

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