1. 程式人生 > >NetworkX系列教程(10)-算法之五:廣度優先與深度優先

NetworkX系列教程(10)-算法之五:廣度優先與深度優先

TE aos 廣度優先搜索 寫到 廣度優先 comment work form path

小書匠 Graph 圖論

重頭戲部分來了,寫到這裏我感覺得仔細認真點了,可能在NetworkX中,實現某些算法就一句話的事,但是這個算法是做什麽的,用在什麽地方,原理是怎麽樣的,不清除,所以,我決定先把圖論中常用算法弄個明白在寫這部分.

圖論常用算法看我的博客:

下面我將使用NetworkX實現上面的算法,建議不清楚的部分打開兩篇博客對照理解.
我將圖論的經典問題及常用算法的總結寫在下面兩篇博客中:
圖論---問題篇
圖論---算法篇

目錄:


註意:如果代碼出現找不庫,請返回第一個教程,把庫文件導入.

11.6廣度優先搜索算法(BFS)

  1. #構建一個長度為10的路徑
  2. G = nx.path_graph(10
    )
  3. #顯示graph
  4. nx.draw_spring(G,with_labels=True)
  5. plt.axis(‘on‘)
  6. plt.xticks([])
  7. plt.yticks([])
  8. plt.show()
  9. #以4為頂點,廣度遍歷
  10. print(list(nx.bfs_tree(G,4).edges()))

技術分享圖片
廣度優先搜索算法示例

輸出:

[(1, 0), (2, 1), (3, 2), (4, 3), (4, 5), (5, 6), (6, 7), (7, 8), (8, 9)]


11.7深度優先搜索算法(DFS)

  1. #構建一個長度為10的路徑
  2. G = nx.path_graph(10
    )
  3. #顯示graph
  4. nx.draw_spring(G,with_labels=True)
  5. plt.axis(‘on‘)
  6. plt.xticks([])
  7. plt.yticks([])
  8. plt.show()
  9. #以5為頂點,深度遍歷,限定深度為3
  10. T = nx.dfs_tree(G, source=5, depth_limit=3)
  11. list(T.edges())

技術分享圖片
深度優先搜索算法示例

輸出:

[(3, 2), (4, 3), (5, 4), (5, 6), (6, 7), (7, 8)]

NetworkX系列教程(10)-算法之五:廣度優先與深度優先