導航:首頁 > 源碼編譯 > 廣度優先演算法的復雜度

廣度優先演算法的復雜度

發布時間:2025-04-26 15:53:56

『壹』 急!!C++深度優先演算法和廣度優先演算法

以搜索為例,下面兩種介紹了深搜與廣搜的具體實現。
演算法博大精深,望樓主好好學習啊
1. 深度搜索
void Graph::DFS(const int v, int visited[])
{
cout<<GetValue(v)<<"";//訪問頂點 v
visited[v] = 1; //頂點 v 作訪問標記
int w = GetFirstNeighbor(v););//取 v 的第一個鄰接頂點 w
while(w != -1) //若鄰接頂點 w 存在
{
if(!visited[w])//若頂點 w 未訪問過, 遞歸訪問頂點 w
DFS(w, visited);
w = GetNextNeighbor(v, w);//取頂點 v 的排在 w 後面的下一個鄰接頂點
}
}
void Graph::UseDFS()
{
visited = new Boolean[n];
for(int i = 0; i < n; i++)
visited[i] = 0;
DFS(0);
delete[] visited;
}
演算法分析:
(1)圖中有 n 個頂點,e 條邊。
(2)如果用鄰接表表示圖,沿 link 鏈可以找到某個頂點 v 的所有鄰接頂點 w。由於總共有 2e 個邊結點,所以掃描邊的時間為O(e)。而且對所有頂點遞歸訪問1次,所以遍歷圖的時間復雜性為O(n+e)。
(3)如果用鄰接矩陣表示圖,則查找每一個頂點的所有的邊,所需時間為O(n),則遍歷圖中所有的頂點所需的時間為O(n2)。
2. 廣度優先搜索
void BFS(Graph G, int visited[])
{//按廣度優先非遞歸遍歷圖G。使用輔助隊列Q和訪問標志數組visited.
for(v = 0; v < G.vexnum; v++)
visited[v] = false;
Quene q;
for(v = 0; v < G.vexnum; v++)
if(!visited[v])
{
visited[v] = true;
EnQuene(Q,v);
while(!QueneEmpty(Q))
{
DeQuene(Q,u);
for(w = FirstAdjVex(G, u); w; w = NextAdjVex(G, u, w))
if(!visited[w])
{
visited[w] = true;
EnQuene(Q, w);
}//if
}//while
}//if
}//BFS
演算法分析:
每個頂點至多進一次隊列。遍歷圖的過程實質上是通過邊或弧找鄰接點的過程,因此廣度優先搜索遍歷圖的時間復雜度和深搜相同。

閱讀全文

與廣度優先演算法的復雜度相關的資料

熱點內容
伺服器共享文件夾怎麼查詢 瀏覽:114
為什麼雙路伺服器突然關機 瀏覽:690
51單片機定時器0任務調度 瀏覽:189
程序員編程語言經典合集epub 瀏覽:566
cadline未知命令 瀏覽:105
PLC的加密狗的作用 瀏覽:859
遺傳演算法優化神經網路權值閾值 瀏覽:288
伺服器為什麼要裝php 瀏覽:871
tomcat搭建android伺服器 瀏覽:340
怎麼下載app躲貓貓 瀏覽:888
極品飛車解壓資源包錯誤 瀏覽:703
pm2016免加密狗破解 瀏覽:439
拳擊pdf 瀏覽:346
柱子箍筋全長加密到板底 瀏覽:385
pdf頁面不一樣 瀏覽:302
javaphp混合 瀏覽:676
雲伺服器商業 瀏覽:193
永磁變頻螺桿式空氣壓縮機優缺點 瀏覽:368
程序員帶老婆回家 瀏覽:462
大學生編程學習資源 瀏覽:125