三、最短路径之Dijkstra算法

来源:互联网 发布:2017网络剧上映时间表 编辑:程序博客网 时间:2024/05/09 01:04

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 nxdef 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 dG=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)

结果


原创粉丝点击