1. 程式人生 > >DFS算法(——模板習題與總結)

DFS算法(——模板習題與總結)

算法 for 比賽 沒有 接下來 需要 動態 深度優先 step

  首先,需要說明的是搜索算法本質上也是枚舉的一種,時間復雜度還是很高的,遇到問題(特別是有水平的比賽上),不要優先使用搜索算法。

  這裏總結一下DFS算法:

  1、從圖中某個頂點出發,訪問v。

  2、找出剛訪問過的頂點的第一個未被訪問的鄰接點,訪問該頂點。以該頂點為新頂點,重復此步驟,直到剛訪問的頂點沒有未被訪問過的鄰接點為止。

  3、返回前一個訪問過的且仍有未被訪問過的鄰接點的頂點,找出該頂點的下一個未被訪問的鄰接點,訪問該頂點。

  4,重復2、3,直到圖中所有頂點都被訪問過,搜索結束。

  理解深度優先搜索的關鍵在於解決“當下該如何做”。至於“下一步如何做”則與“當下該如何做”是一樣的。例如全排列,DFS函數主要解決的問題是當你走到第step個盒子的時候怎麽辦,通常方法是將每一種可能都

嘗試一遍(for循環實現),當前這一步解決之後便進入下一步DFS(step+1);

  下面先練習一下放牌的DFS模板習題:http://www.cnblogs.com/wenzhixin/p/7412323.html

  接下來再練習一下使用DFS算法解決對圖中聯通區域的著色問題:http://www.cnblogs.com/wenzhixin/p/7271071.html

  最後看一下DFS搜索的典型題目:http://www.cnblogs.com/wenzhixin/p/7268017.html

  最後總結一下,其實搜索的題目,在一些有水平的比賽裏都是有難度的,往往使用動態規劃或者找規律,不到萬不得已還是不要使用這種暴力的搜索(高效剪枝除外)。

  

DFS算法(——模板習題與總結)