基于迪杰斯特拉算法写一个找路的代码
时间: 2024-05-12 21:18:38 浏览: 129
迪杰斯特拉算法代码实现
5星 · 资源好评率100%
好的,请稍等,我为您查找一下基于迪杰斯特拉算法写一个找路的代码。
以下是一段基于迪杰斯特拉算法的Python代码,用于寻找最短路径:
```python
import heapq
# 定义节点类
class Node:
def __init__(self):
self.edges = {} # 存放节点边缘的字典
self.visited = False # 用于记录节点是否被访问
self.dist = float("inf") # 用于记录节点到起点的最短距离
def add_edge(self, other, weight):
self.edges[other] = weight # 添加节点之间的边和距离
# Dijkstra算法函数
def dijkstra(start):
pq = [] # 存放最小优先队列
start.dist = 0 # 起点到起点的距离为0
heapq.heappush(pq, (start.dist, start)) # 将起点添加到优先队列
while len(pq) > 0: # 当队列不为空时
current_dist, current = heapq.heappop(pq) # 弹出距离起点最近的节点
if current.visited: # 如果该节点已经被访问过,跳过循环
continue
current.visited = True # 标记该节点已经被访问过
for neighbor, weight in current.edges.items(): # 遍历该节点的邻居节点和距离
distance = current_dist + weight # 计算邻居节点到起点的距离
if distance < neighbor.dist: # 如果计算出的距离小于原有的距离
neighbor.dist = distance # 更新邻居节点到起点的距离
heapq.heappush(pq, (distance, neighbor)) # 将邻居节点加入优先队列
# 将最短距离打印出来
for node in nodes:
print("The shortest distance from start to node " + str(node) + " is ", node.dist)
# 定义节点
n1 = Node()
n2 = Node()
n3 = Node()
n4 = Node()
# 添加节点之间的边和距离
n1.add_edge(n2, 5)
n1.add_edge(n3, 2)
n2.add_edge(n4, 1)
n3.add_edge(n2, 1)
n3.add_edge(n4, 3)
# 将所有节点添加到nodes列表中
nodes = [n1, n2, n3, n4]
dijkstra(n1) # 调用Dijkstra算法函数,传入起点
```
这段代码实现了一个简单的寻找最短路径的算法,基于迪杰斯特拉算法。您可以将其复制到您自己的代码中进行调整和使用。
阅读全文