深度優先搜尋類似於樹的先序遍歷,從每個頂點開始深度優先遍歷,對該分支路徑深入遍歷到不能再深入為止,返回上層,
若上一層有新的分支路徑,繼續遍歷該分支,直到所有點都被訪問
(1)訪問該頂點,並標記為已訪問
(2)if(該頂點的連線點未被訪問過)
遞迴呼叫dfs
(3)重複(2)直到該頂點的所有連線點都被訪問
typedef struct
graph;
vectorvisited;
void dfs(graph &g, int v)
}void dfssearch(graph &g, int v)
寬度優先搜尋類似於樹的層序遍歷,從某個點開始,遍歷完同一層後再遍歷下一層節點
(1)取出某個未訪問的節點作為起始點加入到佇列q中
(2)while(佇列q不為空)
(3)重複(1)(2)直到所有節點都被遍歷(用於處理非連通圖)
void bfs(graph &g)
} }}
深度優先搜尋與廣度優先搜尋
深度優先遍歷的主要思想就是 首先以乙個未被訪問過的頂點作為起始頂點,沿當前頂點的邊走到未訪問過的頂點 當沒有未訪問過的頂點時,則回到上乙個頂點,繼續試探訪問別的頂點,直到所有的頂點都被訪問。沿著某條路徑遍歷直到末端,然後回溯,再沿著另一條進行同樣的遍歷,直到所有的頂點都被訪問過為止。通過上面的圖例可...
廣度優先搜尋與深度優先搜尋
廣度優先搜尋使用的是步步為營的策略,每執行一步迴圈就會把所有可能的情況加入佇列,直到調出迴圈。適用於求最短的問題。深度優先搜尋則是依次遍歷每一種情況,直至找到問題的解。深度優先搜尋和廣度優先搜尋都屬於窮竭法。在執行記憶體空間上面,廣度優先搜尋與情況數成正比,而深度優先搜尋與遞迴深度成正比。inclu...
深度優先搜尋與廣度優先搜尋
首先我們以鍊錶的形式儲存乙個圖 struct edge vectorg2 maxvex int source 6 3 表示從頂點0到頂點1的邊的權值為10。以鄰接鍊錶形式生成該圖 void genedge 首先以乙個未被訪問過的頂點作為起始頂點,沿著當前頂點的邊走到未訪問過的頂點 當沒有未訪問過的頂...