一個深度優先搜尋的小例項——數的全排列
阿新 • • 發佈:2018-12-16
深度優先搜尋是一個利用遞迴來實現的搜尋演算法,它是資料結構中在“樹”的遍歷中常用的一個很有用的演算法。
下面的一個小例項實現了輸入一個0到9的數n,輸出這個數的從1-n的所有全排序結果。它體現了深度優先搜尋的設計思想和實現方法。
好了,下面附上C語言實現的程式碼:
#include "stdio.h" /** * 深度優先搜尋: * 輸入一個數字n, 全排列1-n: 模擬小盒子 */ int n; int book[101], a[101]; void dfs(int step) { int i; if(step == n+1) { for(i=1; i<=n; i++) { printf("%d", a[i]); } printf(" "); return; //返回上一層遞迴 //必須要有一個return,不然將一直嘗試sdf(4\5\6...)的i=123,123,123...此時book123均已經等於1,將無限迴圈下去 } for(i=1; i<=n; i++) { if(book[i] == 0) { a[i] = step; book[i] = 1; dfs(step+1); //執行下一步 book[i] = 0; //將當前一種情況列印後,退一步 } } return; } int main() { printf("輸入1-9一個數字: "); scanf("%d", &n); dfs(1); return 0; }