dijkstra(迪杰斯特拉)算法
用例图:
用ArrayList实现的邻接表图,每个结点有个动态列表记录这个结点的邻边数据Edge包括(指向的下一个结点,边权)基于此图写了一个dijk算法。
dijk的主要流程:
花销表int[] costs:记录从源点到各花销的最短路径。
访问表boolean[] vis:表示哪些结点可以走。
1.costs[源点] = 0,其他点的cost设置为Integer.MAX_VALUE
2.vis所有值为false
3.从costs中找最小值minCost,顺便找到对应的结点minNode。把对应的结点的vis标true, vis[minNode] = true,计数加一。
4.从这个最小结点出发找未被访问的结点node的邻边cost,如果minCost + cost < costs[node]更新costs[node].
5.重复3 4 步骤,直到计数等于结点数,结束。
import java.util.ArrayList;
public class dij {
static int len = 7;
static int[] costs = new int[len];
static int[] parents = new int[len];
public static void main(String[] args) {
int[][] datas = { { 1, 0, 8 }, { 1, 2, 5 }, { 1, 3, 1