廣度優先搜尋與深度優先搜尋

2021-07-23 13:17:06 字數 817 閱讀 2125

廣度優先搜尋使用的是步步為營的策略,每執行一步迴圈就會把所有可能的情況加入佇列,直到調出迴圈。適用於求最短的問題。

深度優先搜尋則是依次遍歷每一種情況,直至找到問題的解。

深度優先搜尋和廣度優先搜尋都屬於窮竭法。在執行記憶體空間上面,廣度優先搜尋與情況數成正比,而深度優先搜尋與遞迴深度成正比。

#include #include using namespace std;

int g[100][100];

int d[100];

int p[100];

bool m[100];

void bfs(int g,int d,int p,int m,int s) }}

void print_path(int p,int s,int v)

void dfs_visit(int g,int u)

} time+=1;

f[u]=time;

}

佇列:#include

申請佇列:queueq;

判隊空:q.empty();

獲取隊頭元素:q.front();

入隊:q.push();

出出隊:q.pop();

a  棧:#include

申請棧:stacks;

入棧:s.push();

出棧:s.pop();

獲取棧頂元素:s.top();

判棧空:s.empty();

深度優先搜尋與廣度優先搜尋

深度優先遍歷的主要思想就是 首先以乙個未被訪問過的頂點作為起始頂點,沿當前頂點的邊走到未訪問過的頂點 當沒有未訪問過的頂點時,則回到上乙個頂點,繼續試探訪問別的頂點,直到所有的頂點都被訪問。沿著某條路徑遍歷直到末端,然後回溯,再沿著另一條進行同樣的遍歷,直到所有的頂點都被訪問過為止。通過上面的圖例可...

深度優先搜尋與廣度優先搜尋

首先我們以鍊錶的形式儲存乙個圖 struct edge vectorg2 maxvex int source 6 3 表示從頂點0到頂點1的邊的權值為10。以鄰接鍊錶形式生成該圖 void genedge 首先以乙個未被訪問過的頂點作為起始頂點,沿著當前頂點的邊走到未訪問過的頂點 當沒有未訪問過的頂...

廣度優先搜尋 深度優先搜尋

前言 這幾天複習圖論演算法,覺得bfs和dfs挺重要的,而且應用比較多,故記錄一下。廣度優先搜尋 有乙個有向圖如圖a 圖a廣度優先搜尋的策略是 從起始點開始遍歷其鄰接的節點,由此向外不斷擴散。1.假設我們以頂點0為原點進行搜尋,首先確定鄰接0的頂點集合s0 2.然後確定頂點1的集合s1 頂點2沒有鄰...