Dijkastra用途
Dijkstra是用于求一个有权的有向或无向图中单源最短路径(一个节点到另一个节点)的算法。简单来说就是给你一个有权图,让你去求其中一个点到另一个点的一条路径的权值之和,并且这条路径的权值之和必须是所有可能的路径中最短的。
如下图所示,Disjkstra就可以求点0到点1 2 3 4 5 6的最短路径。
值得注意的是,如果是有负权存在,Dijkastra是用不了的。
Diskastra实现
首先我们需要考虑如何将这个图用代码实现,我这里会使用Edge和Graph类将整个图实现。当然也有其他实现图的方式,比如矩阵或者List, 但这里不过多赘述。
下面代码的实现思路是将图的每一条边Edge表示出来,并且将Edge加入到Graph类中。
Edge类实现:
public class Edge {
int start; // Edge的起始节点
int end; // Edge的终止节点
int weight; // Edge的权重
public Edge(int start, int end, int weight) {
this.start = start;
this.end = end;
this.weight = weight;
}
}