非遞迴實現DFS的DFS函式體

2021-10-10 21:44:29 字數 854 閱讀 6347

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函式...