图源点到各个点的最短路径(DIJ)

# -*- coding: cp936 -*-
import copy
MV = 0xFFFFFFFF
Vertexs = {0:'v0',1:'v1',2:'v2',3:'v3',4:'v4',5:'v5'}
Arcs = [[MV,MV,10,MV,30,100],[MV,MV,5,MV,MV,MV],[MV,MV,MV,50,MV,MV],\
        [MV,MV,MV,MV,MV,10],[MV,MV,MV,20,MV,MV],[MV,MV,MV,MV,MV,MV]]

#初始化源点到目标点的最短路径    
def init_dist(srcVertex):
    return Arcs[srcVertex]
#某个节点的最短路径
def findShortestPathToVertex(srcVertex, Vertex, dist, targetSet):
    temp = Arcs[srcVertex][Vertex]
    path = [srcVertex, Vertex]
    rslt = []
    
    for i in targetSet.keys():
        if MV != Arcs[i][Vertex] and i != srcVertex:
            if Arcs[i][Vertex] + dist[i] < temp:
                temp = Arcs[i][Vertex] + dist[i]
                path = copy.deepcopy(targetSet[i])
                path.append(Vertex)

    rslt.append(temp)
    rslt.append(path)
    return rslt

#从未获取最短路径的节点中找到一条最短路径的节点        
def findShortestPath(srcVertex, dist, targetSet):
    minValue = MV
    Vertex = -1
    
    for i in Vertexs.keys():
        if i not in targetSet.keys():
            path = findShortestPathToVertex(srcVertex, i, dist, targetSet)
            if path[0] < minValue:
                minValue = path[0]
                Vertex = i
                pathInfo = path[1]
                
    if -1 != Vertex:
        targetSet[Vertex] = pathInfo
        dist[Vertex] = minValue
            
def shortPath_DIJ(srcVertex):
    dist = init_dist(srcVertex)
    #targetSet = [srcVertex]
    targetSet = {srcVertex:[srcVertex]}

    for i in range(len(Vertexs) - 1):
        findShortestPath(srcVertex, dist, targetSet)

    print targetSet
    print dist
    
shortPath_DIJ(0)
                    

 

转载于:https://www.cnblogs.com/chencheng/p/3143415.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值