1.棧初始化2.起始點入棧
3.迴圈語句直到棧為空
int
graph_depthfirst
(graph*g,
int start, edge* tree)
//從start號頂點出發深度優先遍歷,(編號從開始)
//返回訪問到的頂點數,
//tree輸出遍歷樹
//返回的tree[0]是(-1, start),
//真正的遍歷樹儲存在tree[1..return-1], return是返回值
//頂點的訪問次序依次為tree[0].to, tree[1].to, ..., tree[return-1].to
//輸入時,tree的長度至少為頂點數
//返回值是從start出發訪問到的頂點數
;int top=-1
;int visited[g->n]=;
int k=
0,i,j,w=start;
visited[start]=1
; tree[k]
.from=-1
; tree[k++
].to=start;
stack[
++top]
=start;
//start入棧
while
(top>=0)
if((g->adj[i*
(g->n)
+j])
&& visited[j]==0
)}}return k;
/*****end*******/
}
非遞迴dfs演算法
都說現今記憶體不值錢了,哈,也就不考慮空間複雜度的問題了,弄了倆輔助陣列,覺得解這題還是挺容易的,就是不知道有沒有bug。問題描述 假設圖g採用鄰接表儲存,編寫乙個實現連通圖g的深度優先遍歷 從頂點v出發 的非遞迴演算法。演算法思路 就是深度優先的思路。同樣是乙個visited陣列,標記已訪問過的頂...
非遞迴dfs演算法
都說現今記憶體不值錢了,哈,也就不考慮空間複雜度的問題了,弄了倆輔助陣列,覺得解這題還是挺容易的,就是不知道有沒有bug。問題描述 假設圖g採用鄰接表儲存,編寫乙個實現連通圖g的深度優先遍歷 從頂點v出發 的非遞迴演算法。演算法思路 就是深度優先的思路。同樣是乙個visited陣列,標記已訪問過的頂...
非遞迴DFS遍歷
dfs就是回溯法,用遞迴的方法是很自然的。那麼該如何遞迴呢?簡單的說就是 1 如果當前節點沒有被搜尋過,那麼處理當前節點,並標記為搜尋過 如果當前節點已經被搜尋過,退出 2 遞迴遍歷所有沒有被搜尋過的臨接節點。注意,第一步的退出條件。遞迴必須有退出條件,否則會出現死迴圈。對任意節點呼叫上述dfs函式...