dijikstra 旅行商问题_图算法|Dijkstra算法python实现

"""

Dijkstra algorithm

graphdict={"A":[("B",6),("C",3)], "B":[("C",2),("D",5)],"C":[("B",2),("D",3),("E",4)],\

"D":[("B",5),("C",3),("E",2),("F",3)],"E":[("C",4),("D",2),("F",5)],"F":[("D",3),"(E",5)]})

assert: start node must be zero in-degree

"""

def Dijkstra(startNode, endNode, graphdict=None):

S=[startNode]

V=[]

for node in graphdict.keys():

if node !=startNode:

V.append(node)

#distance dict from startNode

dist={}

for node in V:

dist[node]=float('Inf')

while len(V)>0:

center = S[-1] # get final node for S as the new center node

minval = ("None",float("Inf"))

for node,d in graphdict[center]:

if node not in V:

continue

#following is the key logic.If S length is bigger than 1,need to get the final ele of S, which is the center point in current

#iterator, and distance between start node and center node is startToCenterDist; d is distance between node

# among out-degree for center point; dist[node] is previous distance to start node, possibly Inf or a updated value

# so if startToCenterDist+d is less than dist[node], then it shows we find a shorter distance.

if len(S)==1:

dist[node] = d

else:

startToCenterDist = dist[center]

if startToCenterDist + d < dist[node]:

dist[node] = startToCenterDist + d

#this is the method to find a new center node and

# it's the minimum distance among out-degree nodes for center node

if d < minval[1]:

minval = (node,d)

V.remove(minval[0])

S.append(minval[0]) # append node with min val

return dist

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值