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()