Dijkstra算法及可视化

本文详细描述了Dijkstra算法的步骤,并通过Python的networkx库在给定图上实现,包括初始化、选择最小最短路径估计值顶点、更新路径和可视化过程。展示了从顶点A到其他顶点的最短路径及其遍历过程。
摘要由CSDN通过智能技术生成

Dijkstra算法步骤

1、初始化:将所有顶点的最短路径估计值设为无穷大(除了源顶点A,设为0)。
2、从未处理的顶点集合中选择一个具有最小最短路径估计值的顶点(首次为A)。
3、更新该顶点的所有未处理相邻顶点的最短路径估计值。
4、将当前顶点标记为已处理。
5、如果还有未处理的顶点,返回到步骤2。

# A - -1 - -B - -2 - -C
# | |
# 3
# 5
# | |
# D - -4 - -E - --F
import matplotlib.pyplot as plt
import networkx as nx

# 定义图的边和权重
edges = [('A', 'B', 1), ('B', 'C', 2), ('A', 'D', 3), ('D', 'E', 4), ('E', 'F', 4), ('C', 'F', 5)]
G = nx.Graph()
G.add_weighted_edges_from(edges)

# 使用Dijkstra算法找到从A到所有其他顶点的最短路径
shortest_paths = nx.single_source_dijkstra_path(G, 'A')

# networkx <=2.5 版本 尝试以下:
# pos = nx.spring_layout(G, seed=42)  # 设置布局
# pos = nx.spring_layout(G)
pos = nx.circular_layout(G)

# networkx >2.5 版本
# pos = nx.spring_layout(G, random_state=42)  # 设置布局

nx.draw(G, pos, with_labels=True, node_size=2000, node_color='lightblue', font_size=15, font_weight='bold', edge_color='gray', width=2, alpha=0.6)
nx.draw_networkx_edge_labels(G, pos, edge_labels={(u, v): f"{w['weight']}" for u, v, w in G.edges(data=True)}, font_color='red')


plt.title('图的可视化')
plt.show()

# 输出最短路径
print(shortest_paths)


遍历过程:

当前正在访问的顶点以黄色高亮显示。
已访问的顶点以绿色高亮显示。
当前最短路径以蓝色高亮显示。

在这里插入图片描述
首先从顶点A开始,标记为黄色
然后,访问A的邻居B和D,并更新它们的距离。
在这里插入图片描述

接下来,从未访问的顶点中选择距离最小的顶点B,并访问它的邻居C。此时B被标记为已访问(绿色)。
在这里插入图片描述

然后,从未访问的顶点中选择距离最小的顶点D,并访问它的邻居E。此时D被标记为已访问(绿色)。
在这里插入图片描述

继续这个过程,直到所有的顶点都被访问。

在这里插入图片描述


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值