Dijkstra‘s algorithm

Dijkstra’s 算法

该算法是求图中最短路径的一个算法,使用该算法的前提是每条边的权重为非负值

思路:首先选好开始节点,因为距离都是相对的,根节点的距离设为0(自己到自己的距离肯定是0),除了根节点之外的点的距离初始值设为inf(无穷大),之后用一个优先级队列来存放要访问的节点,每次都访问距离根节点最短的节点(其基本思想就是贪心算法的思想,每次先访问到根节点距离最短的节点,然后就能找到最短路径)

import heapq
#以下图为例子
graph = {
    "A":{"B":5,"C":1},
    "B":{"A":5,"C":2,"D":1},
    "C":{"A":1,"B":2,"D":4,"E":8},
    "D":{"B":1,"C":4,"E":3,"F":6},
    "E":{"C":8,"D":3},
    "F":{"D":6}
}

def Dijkstra's(graph,start):
	distance = []
	for i in graph:
		if i == start:
			distance.append(0)
		else:
			distance.append(float('inf'))
	
	pqueue = []
	seen = [] #表示已经访问过的点
	heapq.heappush(pqueue,(0,start))#将节点和其距离根节点的距离以元组的形式存入pqueue中方便读取
	while len(pqueue) != 0:
		pair = heap.heappop(pqueue)
		dist = pair[0] #表示该点到根节点的距离
		vertex = pair[1] #表示正在访问的节点
		seen.append(vertex)
		for i in adj_list[vertex]:
			if i not in seen:
				if dist + graph[vertex][i] < distance[i]:
					heap.heappush(pqueue,(dist + graph[vertex][i], i))
					distacne[i] = dist + graph[vertex][i]
		return distance
					
	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值