Dijkstra’s algorithm
迪杰斯特拉算法,也名迪克斯特拉算法,用以解决有向带权图的最佳路径问题。
注意:图中不可有负权!否则不可使用此算法!
本实现用到的数据结构有三。
- 有向带权图graph。用了Java中的org.apache.commons.lang3.tuple.Triple,left和middle表示有向图的两个节点,right表示left->middle的权。
- 消费表costs,用以动态存储起点到其他节点的代价。
- 路径表parent,用以动态存储每个节点的最佳前节点,即从哪个节点(value)到当前节点(key)是最佳的。
import org.apache.commons.lang3.tuple.Triple;
import java.util.*;
import java.util.stream.Collectors;
public class Test {
// 用一个较大的数字代替无限大
public final static int MAX = 100000;
public static void main(String[] args) {
// 定义一个图,a是起点,f是终点
String a = "A";
String b = "B";
String c = "C";
String d = "D";
String e = "E";
String f = "F";
List<MutableTriple<String, String, Integer>> graph = new ArrayList<>();
graph.add(MutableTriple.of(a, b, 5));
graph.add(MutableTriple.of(a, c, 3));
graph.add