輸入乙個數n,輸出 1 ~ n 的全排列,例如輸入 3,全排列則為:123,132,213,231,312,321 一共六種。
這裡採用深度優先搜尋來解決這個問題:
#includeint n;
int a[10],book[10];
//遞迴核心**
void dfs(int step)
printf("\n");
return; //返回上一步
}else
}return;
}}int main()
理解深度優先搜尋的關鍵在於解決「當下該如何做」。至於「下一步如何做」,則與「當下該如何做」事一樣的。下面**就是深度優先搜尋的基本模型。
void dfs(int step)
}
**解讀:
當我們輸入12,**執行,一路執行,放入數字
一路到1,2,3,4,5,6,7,8,9,10,11,12,這時候在下一節點碰到 step == n+1,
已經沒有下一節點了,直接輸出全排列,1,2,3,4,5,6,7,8,9,10,11,12,同時進行返回,返回到第12步,
第12步執行****:book[i] = 0 ,將12**,繼續退回到11步,
在第11步,先**了11,在for迴圈中,繼續前進,到達第12次for迴圈,因此放入12,繼續深度下一節點
此時,只剩下11,放入,繼續下一節點,碰到 step == n+1
已經沒有下一節點了,直接輸出全排列,1,2,3,4,5,6,7,8,9,10,12,11,同時進行返回,返回到第12步,
在第12步****。。。。。。。
以此類推,直至全部搜尋完畢
廣度優先搜尋 深度優先搜尋
前言 這幾天複習圖論演算法,覺得bfs和dfs挺重要的,而且應用比較多,故記錄一下。廣度優先搜尋 有乙個有向圖如圖a 圖a廣度優先搜尋的策略是 從起始點開始遍歷其鄰接的節點,由此向外不斷擴散。1.假設我們以頂點0為原點進行搜尋,首先確定鄰接0的頂點集合s0 2.然後確定頂點1的集合s1 頂點2沒有鄰...
廣度優先搜尋,深度優先搜尋
深度優先搜尋 depth first search 簡稱dfs。最直觀的例子就是 走迷宮 廣度優先搜尋 每個頂點都要進出一遍佇列,每個邊也都會被訪問一次,所以 時間複雜度o v e 主要消耗記憶體的是visited prev陣列 queue佇列,所以 空間複雜度o v 深度優先搜尋 每條邊最多會被訪...
深度優先搜尋 廣度優先搜尋
深度優先搜尋 廣度優先搜尋 通過鄰接矩陣對圖進行深搜和廣搜 package com.neusoft.data.structure 深度優先搜尋 廣度優先搜尋 通過鄰接矩陣對圖進行深搜和廣搜 public class dfsbfs 初始化 邊 mmatrix new int vlen vlen for...