1.Dijkstra算法
1.1算法介绍
1.2算法原理
1.3算法过程
1.4算法示例
从节点1出发到图中其余节点的最短路径分别是:
2—8,3—15,4--20,5—13,6--18
程序:说明:这里假设边的权重最大不超过100,以此代替无穷大;利用s和s1分别保存两个不同的点集合,d中保存l数组
import networkx as nx
def Dijkstra(i,G=nx.Graph):
s=[]
s1=[]
d=[]
s.append(i)
d.append(0)
for node in G.nodes():
if node != i:
s1.append(node)
d.append(100)
while s1:
u_item=s[len(s)-1]
for node in s1:
if G.has_edge(u_item,node):
if d[node-1]>G.get_edge_data(u_item,node)['weight']+d[u_item-1]:
d[node-1]=G.get_edge_data(u_item,node)['weight']+d[u_item-1]
index=0
if len(s1)==1:
index=0
else:
i=1
while i<len(s1):
if d[s1[i]-1]<d[s1[index]-1]:
index=i
i=i+1
s.append(s1[index])
del s1[index]
print d
G=nx.Graph()
G.add_weighted_edges_from([(1,2,8),(1,3,16),(1,5,13),(2,3,7),(2,4,17),(2,5,11),(2,6,10),(3,4,5),(4,5,14),(4,6,6)])
Dijkstra(1,G)
结果