v:頂點個數,e:邊的個數
時間複雜度
空間複雜度
回溯思想,深度遞迴演算法
時間複雜度:o(e), 每條邊最多訪問兩次
空間複雜度:o(v)
//無向圖
class
graph
的節點`
, id: i,
//當前節點下標})
}}// 無向圖一條邊存兩次,s, t為座標
addedge
(s, t)
}//頂點個數
var v =
8//測試資料:圖
var graph =
newgraph
(v)graph.
addedge(0
,1)graph.
addedge(0
,3)graph.
addedge(1
,2)graph.
addedge(1
,4)graph.
addedge(2
,5)graph.
addedge(3
,4)graph.
addedge(4
,5)graph.
addedge(4
,6)graph.
addedge(5
,7)graph.
addedge(6
,7)//廣度優先演算法
//s,t為下標
function
bfs(s, t)
//待訪問頂點的佇列
const queue =
[graph.adj[s]
]//搜尋路徑的陣列
const prev =
newarray
(v).
fill(-
1)while
(queue.length)
= queue.
shift()
for(
let v of edges)
visited[v]
=true
queue.
push
(graph.adj[v])}
}}}//路徑列印函式
function
(prev, s, t1)
//記錄路徑,最後乙個不記錄箭頭
if(t1 == t)
else}}
bfs(0,
7)//0 -> 1 -> 2 -> 5 -> 7
bfs(1,
5)//1 -> 2 -> 5
bfs(6,
2)//6 -> 4 -> 1 -> 2
//深度優先演算法
function
dfs(s, t)
const prev =
newarray
(v).
fill(-
1)helper
(s, t)
(prev, s, t)
function
helper
(w, t)
let= graph.adj[w]
for(
let v of edges)}}
}dfs(2
,5)//2 -> 1 -> 0 -> 3 -> 4 -> 5
dfs(5,
2)//5 -> 2
dfs(1,
7)//1 -> 0 -> 3 -> 4 -> 5 -> 7
dfs(0,
7)//0 -> 1 -> 2 -> 5 -> 4 -> 6 -> 7
深度優先搜尋和廣度優先搜尋
深度優先的思想是先記住當前的起點,然後選定乙個方向一條道走到黑,若失敗則回到起點再選定另外乙個方向走到黑。廣度優先的思想是記住當前的起點,然後選定各個方向的相鄰點作為新的起點,再繼續。可以看出,深度優先和廣度優先都需要記住當前的起點,不同的是深度優先每次只需要記住乙個方向的相鄰點,廣度優先則要記住所...
廣度優先搜尋和深度優先搜尋
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...