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

2021-09-26 14:11:09 字數 1892 閱讀 5389

深度優先搜尋(depth-first-search),簡稱dfs。最直觀的例子就是「走迷宮」

* 廣度優先搜尋:

每個頂點都要進出一遍佇列,每個邊也都會被訪問一次,所以

時間複雜度o(v+e)

主要消耗記憶體的是visited、prev陣列、queue佇列,所以

空間複雜度o(v)

* 深度優先搜尋:

每條邊最多會被訪問兩次,一次遍歷,一次回退,所以

時間複雜度o(e),e表示邊的個數

主要消耗記憶體的是visited、prev陣列和遞迴呼叫棧,

visited、prev陣列的大小跟頂點個數v有關,遞迴深度不會超過頂點個數v,所以

空間複雜度o(v)

*/#include #include #include using namespace std;

class graph

} // 析構函式

~graph()

delete adj;

adj = null;

} // 廣度優先搜尋

void bfs(int start, int end)

while(!que.empty())

visited[q] = true;

que.push(q);}}

} delete visited;

delete prev;

} // 深度優先搜尋

void dfs(int start, int end)

recurdfs(start, end, visited, prev);

print(prev, start, end);

} // 增加邊(無向圖)

void addedge(int start, int end)

// 列印輸出圖

void printgraph()

cout << endl;

} cout << endl;

}private:

int count; // 圖的頂點

pvector* adj; // 圖的邊鍊錶

bool found;

// 遞迴列印

void print(int *arr, int start, int end)

if (arr[end] != -1)

}// dfs搜尋

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

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

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

深度優先搜尋 廣度優先搜尋 通過鄰接矩陣對圖進行深搜和廣搜 package com.neusoft.data.structure 深度優先搜尋 廣度優先搜尋 通過鄰接矩陣對圖進行深搜和廣搜 public class dfsbfs 初始化 邊 mmatrix new int vlen vlen for...

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

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