PythonクラスライブラリNetworkx実装図最短パス


PythonクラスライブラリNetworkx実装図最短パス
  は最近、スペクトルに関するタスクをしています.その中で、図タイプのデータの中で2つのノード間の最短経路を探すことに関連しています.一般的に最短経路を実現するアルゴリズムには、古典的なDijkstraとFloydアルゴリズムがありますが、通常は自分で実現するのは非常に面倒です.30分の調査を経て、非常に便利なツールを発見しました.今日は、pythonクラスライブラリNetworkxと関連する参考ブログを共有します.
前記
【1】Networkxのインストール:  通常、anacondaがインストールされている場合は、networkxクラスライブラリがインストールされます.インストールされていない場合は、pipを使用してインストールできます.
pip install networkx
【2】networkxクラスライブラリは、一部の関数呼び出しでmatplotlibパッケージに依存するため、使用中の問題
AttributeError: module ‘matplotlib.cbook’ has no attribute ‘iterable’
上記の状況で説明したのはバージョンの問題で、2.2.3バージョンのmatplotlibをインストールすることを指定することができます.
_tkinter.TclError: no display name and no $DISPLAY environment variable
上記の場合、1つの実行可能な方法は、次の4つの行を追加することです(Linuxコマンド行はmatplotlibを使用し、エラー_tkinter.TclError:no display name and no$DISPLAY environment variable問題解決):
import networkx as nx
import matplotlib
matplotlib.use('AGG')
import matplotlib.pyplot as plt

インプリメンテーション
最短パスを実装するには、次のコードを選択します.最短パスの効果を迅速にテストできます.ここで、図のノードのデフォルトは0-5の整数数で、add_を通過します.pathは新しいエッジを追加し、ソースプログラムはNetworkXシリーズチュートリアル(10)-アルゴリズムの1つ:最短パスの問題
#       
G = nx.path_graph(5)
nx.add_path(G,[0,5,2])
nx.add_path(G,[0,6,4])
nx.draw(G,with_labels=True)
#      
print('0   4      : ',nx.shortest_path(G, source=0, target=4))
p1 = nx.shortest_path(G, source=0)
print('0           : ',p1)

#           
print('      0   2       : ',[p for p in nx.all_shortest_paths(G, source=0, target=2)])

#        
p2=nx.shortest_path_length(G, source=0, target=2)  #      
p3=nx.average_shortest_path_length(G) #          
print('  0   2       :',p2,'         : ',p3)

#       
print('    0   2     ',nx.has_path(G,0,2))

 カスタマイズされた図構造の場合、ブロガーは以下のコードを使用することができます.
import networkx as nx
#       
dic1 = [('1',2),('444',4),(1,3),(3,4),(1,4)] //1,            
dic1 = [('1',2,2),('444',4,1),(1,3,6),(3,4,3),(1,4,3)] //21633
G = nx.Graph()
G.add_edges_from(dic1)
nx.draw(G,with_labels=True)


もっと短いパス実装の詳細はブログ:NetworkXシリーズチュートリアル(10)-アルゴリズムの1つ:最短パスの問題とNetworkxの一般的なアルゴリズムと最短パスの紹介を参照してください.コードを簡単に修正して自分のプロジェクトを実現することができます.