深度優先的思想是先記住當前的起點,然後選定乙個方向一條道走到黑,若失敗則回到起點再選定另外乙個方向走到黑。
廣度優先的思想是記住當前的起點,然後選定各個方向的相鄰點作為新的起點,再繼續。
可以看出,深度優先和廣度優先都需要記住當前的起點,不同的是深度優先每次只需要記住乙個方向的相鄰點,廣度優先則要記住所有方向的相鄰點。
如下圖:
對於深度優先來說:
選定1為當前節點,將節點1所有方向的節點進行儲存,(此時儲存2345)
選定2為當前節點(將節點2取出),將節點2所有方向的節點進行儲存。(此時儲存34567)
選定6為當前節點(將節點6取出),沒有相鄰節點了,在這裡已經走到頭,需要回頭。(此時儲存3457)
選定7為當前節點(將節點7取出),7沒有相鄰節點,在這裡已經走到頭,需要回頭(此時儲存345)
選定3為當前節點...
從上面可以看出,先儲存的節點後取出,這是典型的棧資料結構,可以使用棧進行儲存資料也可以使用遞迴演算法。
對於廣度優先來說:
選定1為當前節點,將節點1所有方向的節點保,(此時儲存2345)
選定2為當前節點(將節點2取出),將節點所有方向相鄰節點儲存(此時儲存34567)
選定3為當前節點(將節點3取出),將節點所有方向相鄰節點儲存(此時儲存4567)
選定4為當前節點(將節點4取出),將節點4所有方向相鄰節點儲存(此時儲存5678)
選定5為當前節點(將節點5取出),將節點所有方向相鄰節點儲存(此時儲存678)
選定6為當前節點...
從上面可以看出,先儲存的節點先取出,這是典型的佇列資料結構,所以可以使用佇列進行儲存資料。。
廣度優先搜尋和深度優先搜尋
dbf深度優先搜尋,最經典的方法,可以使用遞迴來實現。結構體定義 typedef char vertextype typedef int edgetype define maxvex 100 define infinite 65535 typedef struct mgraph 測試函式如下 mgr...
深度優先搜尋和廣度優先搜尋
定義 圖 graph 是由頂點的有窮非空集合和頂點之間邊的集合組成,通常表示為 g v,e 其中,g表示乙個圖,v是圖g中頂點的集合,e是圖g中邊的集合.簡單點的說 圖由節點和邊組成。乙個節點可能與眾多節點直接相連,這些節點被稱為鄰居。如二叉樹就為乙個簡單的圖 廣度優先搜尋演算法 breadth f...
深度優先搜尋和廣度優先搜尋
深度優先搜尋 可以用這個圖來很好的幫助我們理解dfs,dfs是一種列舉所有完整路徑來遍歷所有情況的搜尋方法,可以使用遞迴來很好的實現dfs,遞迴式可以理解為 解決的典型問題給定乙個序列,列舉這個序列的所有子串行,從中選擇乙個某方面最優的子串行。也可以簡化理解為列舉從n個整數中選擇k個數的所有方案 具...