1. 前言
由图:
如果我们想要求得节点1到节点5(也可以是其他节点)的最短路径,我们可以使用Dijkstra算法。
2. 步骤与思路
1. 将所有顶点标记为未访问(顶点类的visited属性设置为false)。创建一个未访问顶点的集合。
2. 为每个顶点分配一个临时距离值:
- 对于我们的初始顶点,将其设置为0;
- 对于所有其他顶点,将其设置为无穷大。
3. 每次选择最小临时距离的未访问节点作为当前顶点。
4. 对于当前顶点,遍历其所有未访问的邻居,并更新它们的临时距离为更小。
- 例如,1->6的距离是14,而1->3->6的距离是11。这时将距离更新为11.
- 否则,将保留上次距离值。
5. 当前顶点的邻居处理完后,把它从未访问集合中删除。
3. 顶点类与边类
public class Vertex {
// 顶点的名字,用来区分顶点
String name;
// 与该顶点有关的边的集合
List<Edge> edges;
// 判断是否已经被遍历
boolean visited = false;
// 初始距离为无穷大
int dist = INF;
// INF表示无穷