A*算法及迪杰斯特拉算法求解最短路径问题
一、题目
最短路径问题:求各节点到Bucharest的最小距离。
![[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UMugchyR-1641633409771)(C:\Users\Jackson\AppData\Roaming\Typora\typora-user-images\image-20220108122828222.png)]](https://i-blog.csdnimg.cn/blog_migrate/b02b024fc26320e39edbc9692225080b.png)
二、数据表示
在表示图的数据结构中,需要涵盖节点的相连关系和相连节点间的距离,以下为python数据结构表示
- 记录图中的全部节点,用于循环遍历:
vertex_list_ = ['Oradea', 'Zerind', 'Arad', 'Sibiu', 'Fagaras', 'Timisoara', 'Rimnicu Vilcea', 'Lugoj', 'Mechadia', 'Pitesti', 'Craiova', 'Drobeta', 'Giurgiu', 'Bucharest', 'Urziceni', 'Vaslui', 'Hirsova', 'Iasi', 'Neamt', 'Eforie']
-
记录相连的节点—Map字典
一个元素的键为图中的节点,值为与键相连的节点列表。可以直接通过键值得到与该节点相连的节点。
# 采用字典记录节点间相连的关系,其中键为节点,值为与之相连的节点列表
Map = {
'Oradea': ['Zerind', 'Sibiu'], 'Zerind': ['Arad', 'Oradea'],
'Arad': ['Zerind', 'Sibiu', 'Timisoara'],
'Sibiu': ['Fagaras', 'Oradea', 'Arad', 'Rimnicu Vilcea'],
'Fagaras': ['Sibiu', 'Bucharest'],
'Timisoara': ['Arad', 'Lugoj'],
'Rimnicu Vilcea': ['Pitesti', 'Sibiu', 'Craiova'],
'Lugoj': ['Timisoara', 'Mechadia'],
'Mechadia': ['Lugoj', 'Drobeta'],
'Pitesti': ['Rimnicu Vilcea', 'Craiova', 'Bucharest'],
'Craiova': ['Drobeta', 'Pitesti', 'Rimnicu Vilcea'],
'Drobeta': ['Mechadia', 'Craiova'],
'Giurgiu': ['Bucharest'],
'Bucharest': ['Fagaras', 'Pitesti', 'Giurgiu', 'Urziceni'],
'Urziceni': ['Vaslui', 'Bucharest', 'Hirsova'],
'Vaslui': ['Iasi', 'Urziceni'],
'Hirsova': ['Urziceni', 'Eforie'],
'Iasi': ['Neamt', 'Vaslui'],
'Neamt': ['Iasi'],
'Eforie': ['Hirsova']
}
-
记录节点间的距离–
disMap字典该字典的键为相连节点组成的元组,值为两节点之间的距离。
disMap = {
('Oradea', 'Oradea'): 0, ('Oradea', 'Zerind'): 71, ('Oradea', 'Sibiu'):

本文对比了A*算法与迪杰斯特拉算法在求解最短路径问题上的应用,探讨了A*算法的估计代价性质及其可能不是最优解,以及迪杰斯特拉算法的动态规划特性及其适用场景。
最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



