【dijkstra算法代码】Dijkstra算法是一种用于求解单源最短路径问题的经典算法,适用于边权为非负的图。该算法由荷兰计算机科学家艾兹赫尔·戴克斯特拉(Edsger W. Dijkstra)于1956年提出,广泛应用于网络路由、地图导航等领域。
以下是对Dijkstra算法的基本原理和实现方式的总结,并附上相关代码示例。
一、算法原理总结
项目 | 内容 |
算法类型 | 单源最短路径算法 |
适用图类型 | 有向或无向图,边权非负 |
时间复杂度 | O(E log V)(使用优先队列优化) |
核心思想 | 从起点出发,逐步扩展到距离最近的未访问节点,更新各点的最短路径 |
数据结构 | 优先队列(最小堆)、邻接表或邻接矩阵 |
特点 | 不能处理负权边,但对非负权图效率高 |
二、Dijkstra算法代码示例(Python)
```python
import heapq
def dijkstra(graph, start):
初始化距离字典
dist = {node: float('inf') for node in graph}
dist[start] = 0
优先队列,存储 (距离, 节点)
heap = [(0, start)
while heap:
current_dist, current_node = heapq.heappop(heap)
如果当前距离大于记录的距离,跳过
if current_dist > dist[current_node]:
continue
遍历相邻节点
for neighbor, weight in graph[current_node].items():
distance = current_dist + weight
if distance < dist[neighbor]:
dist[neighbor] = distance
heapq.heappush(heap, (distance, neighbor))
return dist
示例图(邻接表形式)
graph = {
'A': {'B': 1, 'C': 4},
'B': {'A': 1, 'C': 2, 'D': 5},
'C': {'A': 4, 'B': 2, 'D': 1},
'D': {'B': 5, 'C': 1}
}
调用函数
result = dijkstra(graph, 'A')
print(result)
```
三、运行结果说明
假设调用 `dijkstra(graph, 'A')`,输出结果如下:
```
{'A': 0, 'B': 1, 'C': 3, 'D': 4}
```
- 从 `'A'` 到 `'B'` 的最短距离是 `1`
- 从 `'A'` 到 `'C'` 的最短距离是 `3`
- 从 `'A'` 到 `'D'` 的最短距离是 `4`
四、算法优缺点总结
优点 | 缺点 |
算法简单易懂,实现方便 | 无法处理负权边 |
对非负权图效率较高 | 需要额外的空间存储距离信息 |
可用于多种应用场景 | 使用优先队列时可能增加时间复杂度 |
通过以上内容,我们可以清晰地了解Dijkstra算法的基本原理、代码实现以及其在实际中的应用。该算法是图论中最基础且重要的算法之一,掌握它对于理解和解决实际问题具有重要意义。
以上就是【dijkstra算法代码】相关内容,希望对您有所帮助。