Dijkstra算法
算法核心
- 计算单源最短路径
- 找到最短路径已经确定的顶点,从它出发更新其相邻顶点的最短距离
- 更新完毕后,不再关注“最短路径已经确定的顶点”
输入处理
int n = 4; // 顶点数
int[][] edges = {
{
1, 2}, {
1, 3}, {
2, 3}, {
2, 4}, {
3, 4}}; // 边
int[] vals = {
2, 5, 4, 6, 2}; // 边的权重 与edges的边一一对应
邻接矩阵写法
计算从start顶点到end顶点的最短路径
public int dijDistByMatrix(int start, int end) {
int[][] cost = new int[n + 1][n + 1]; // 邻接矩阵
int[] dis = new int[n + 1]; // 保留最短距离
boolean[] vis = new boolean[n + 1]; // 最短距离的访问情况
Arrays.fill(dis, Integer.MAX_VALUE); // 最短距离初始化
dis[start] = 0; // start表示起点