遞迴方式構造DFS生成樹 python實現

2021-09-01 20:20:41 字數 845 閱讀 3631

從連通無向圖或強連通有向圖中任一頂點出發遍歷,或從有根有向圖的根頂點出發遍歷,都可以訪問到所有頂點。在遍歷中經過的邊加上原圖的所有頂點,就構成該圖的一棵生成樹。通過遍歷構造生成樹的過程可以按深度優先方式或寬度優先方式進行,在遍歷中記錄訪問的所有頂點和經過的邊,就得到原圖的深度優先生成樹(簡稱dfs生成樹),或者寬度優先生成樹(bfs生成樹)。

在得到的生成樹中,每個節點可能有多個後一節點,但都有唯一的前一頂點,可以採用儲存該節點前一節點以及邊的方式來表示一棵生成樹。即span_forest[i]=(j,e)表示i節點的上乙個節點是j,邊為e。特別地,如果該節點為根節點,那麼它的前一節點為它本身,邊為0。

採用遞迴方式構造dfs生成樹的**如下。

def dfs_span_forest(graph):

vnum=graph.vertex_num()

span_forest=[none]*vnum

def dfs(graph,v): #遞迴遍歷函式,在遞迴中記錄經由邊

nonlocal span_forest#span_forest是nonlocal變數,即始終引用外層的span_forest

for u,w in graph.out_edges(v):

if span_forest[u] is none:

span_forest[u]=[v,w]

dfs(graph,u)

for v in range(vnum):

if span_forest[v] is none:

span_forest[v]=(v,0)

dfs(graph,v)

return span_forest

最小生成樹 dfs

題目大意 告訴你一棵樹有n個節點,然後以矩陣的形式告訴你每兩個節點間的距離,問是否能構成一顆樹。首先,我們可以排除掉一些錯誤答案,比如arr i i 0,arr i j arr j i arr i j 0 i j 這幾種我們可以直接輸出no 求最小生成樹,然後dfs求兩點之間的最短距離,是否符合已知...

Java遞迴生成樹

注意 根節點的pid 0,其他節點的pid跟id是有對應的父子關係的。這裡只展示遞迴生成樹的 查詢資料庫的操作非常簡單,只用到了一句sql,然後將結果封裝成list。select id,pid,name from t menu service override public list tree 遞迴...

遞迴生成樹 遞迴生成Emacs的TAGS檔案?

遞迴生成樹 how to generating tags file for emacs recursively?etags seems not support recursively generating tags file.如何為emacs遞迴生成tags檔案?etags似乎不支援遞迴生成tags...