function dij(node_name,G)#以哪个结点创造最短路径表,网络list#定义每个顶点的标签D[v]并赋值,本节点赋值为0,其他结点赋值为无穷
D_v = Dict()for(i,k)in G
push!(D_v,i => Inf)
end
D_v[node_name]=0#定义一个空集合C
C_name =[]
C_D =[]#选最短的一个u放进C集合while(true)min= findmin(D_v)
push!(C_name,min[2])
push!(C_D,min[1])#更新集合u所达到的节点(节点需要在C之外)for(name,Dij)in G[min[2]]if !(name in C_name)
D_v[name]= Dij + D_v[min[2]]
end
end
delete!(D_v,min[2])if D_v.count <=0break
end
end
Dict(zip(C_name, C_D))
end
print(dij("N5",network_node))
可视化网络
using PyCall
@pyimport networkx as nx
@pyimport matplotlib.pyplot as plt
G = nx.MultiGraph()for(i,v)in network_node
G.add_node(i,desc = i)
end
for(i,j)in network_node
for(h,v)in j
G.add_edge(i,h,D = v)
end
end
pos = nx.spring_layout(G)
nx.draw(G, pos)
node_labels = nx.get_node_attributes(G,"desc")
nx.draw_networkx_labels(G, pos, labels=node_labels)
edge_labels = nx.get_edge_attributes(G,"D")
nx.draw_networkx_edge_labels(G, pos, labels=edge_labels)
plt.show()