python 最短路径-贪婪算法

#!/usr/bin/python3.4
import copy
distance={(1,2):2,(1,3):1,(2,3):2,(2,4):1,(2,5):3,(3,4):4,(4,5):1,(3,6):3,(5,7):4,(6,7):1}
maxcount=7
stack=list()
dst=dict()
path=dict()
def Probe(sourcenode,desnode):
    if sourcenode==desnode: return
    stack.append(sourcenode)
    for i in range(1,maxcount+1):
        if (sourcenode,i) in distance.keys() and i not in stack:
            if (dst.get(sourcenode,0)+distance[(sourcenode,i)] < dst.get(i,1000)):
                dst[i]=dst.get(sourcenode,0)+distance[(sourcenode,i)]
                path[i]=sourcenode
    if sourcenode in dst.keys(): del dst[sourcenode]
    if not len(dst.keys()): return True
    item=sorted(dst.items(),key=lambda d:d[1])[0][0]
    Probe(item,desnode)
def searchPath(sourcenode,desnode):
   if sourcenode == desnode : return
   if desnode in path.keys():
        searchPath(sourcenode,path[desnode])
        print('path %d->%d'%(path[desnode],desnode))
Probe(2,7)
print(path)
searchPath(2,6)


Probe为生成路径信息

searchPath(s,d) 为打印最短路径

本例输出为:

{3: 2, 4: 2, 5: 4, 6: 3, 7: 5}
path 2->3
path 3->6

从2->6的最短路径为: 先2到3,再3到6.





转载于:https://my.oschina.net/000quanwei/blog/540515

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值