图问题与遗传算法详解
1. 加权图中寻找最短路径
在构建超级高铁网络时,建设者不太可能一次性连接整个国家,而是希望最小化关键城市之间铺设轨道的成本。从某个起始城市到其他任何城市的成本计算,属于“单源最短路径”问题,即“在加权图中,从某个顶点到其他每个顶点的最短路径(以总边权衡量)是什么?”
1.1 Dijkstra算法
Dijkstra算法用于解决单源最短路径问题。它以一个起始顶点作为输入,返回加权图中从该顶点到其他任何顶点的最低权重路径,以及到每个顶点的最小总权重。该算法从单源顶点开始,不断探索距离起始顶点最近的顶点,因此和Jarník算法一样,它是贪心算法。当遇到新顶点时,它会记录该顶点与起始顶点的距离,如果找到更短路径则更新此值,同时记录到达每个顶点的边,类似于广度优先搜索。
算法步骤如下:
1. 将起始顶点添加到优先队列中。
2. 从优先队列中取出距离最近的顶点(开始时就是起始顶点),将其称为当前顶点。
3. 查看与当前顶点相连的所有邻居。如果这些邻居之前未被记录,或者当前边提供了到它们的新最短路径,则记录每个邻居与起始顶点的距离、产生此距离的边,并将新顶点添加到优先队列中。
4. 重复步骤2和3,直到优先队列为空。
5. 返回从起始顶点到每个顶点的最短距离以及到达每个顶点的路径。
以下是Dijkstra算法的代码实现:
from __future__ import annotations
from typing import TypeVar, List, Optional, Tuple, Dict
超级会员免费看
订阅专栏 解锁全文
23万+

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



