关于使用 Dijkstra's Algorithm (迪科斯彻算法)求最短路径的基本原理,网上已有很多介绍,本文不再赘述,下面直接给出Java版实现,算法核心部分已经添加了详尽的注释。
定义顶点
/** 顶点 */
public class Vertex {
/** 顶点名称,不能重复 */
private String name;
/** 该顶点上的所有临边 */
private List adjacencies = new ArrayList<>();
/** 遍历至该顶点的上一个最短顶点 */
private Vertex predecessorVertex;
/** 遍历至该顶点的上一条最短边 */
private Edge predecessorEdge;
/** 从原点到该顶点的总长度 */
private double distance = Double.MAX_VALUE;
public Vertex(String name) {
this.name = name;
}
@Override
public int hashCode() {
return name.hashCode();
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Vertex other = (Vertex) obj;
if (name == null) {
return other.getName() == null;
}
return name.equals(other.getName());
}
@Override
public String toString() {
return name;
}
public void addNeighbour(Edge edge) {
this.adjace