算法 - Dijkstra 最短路径

Dijkstra(迪杰斯特拉)算法是典型的最短路径路算法,用于计算一个节点到其他所有节点的最短路径。

由于遍历节点很多,所以 Dijkstra 效率低。

Dijkstra 属于贪心算法总是做出在当前看来是最好的选择)。 

算法步骤  

1  初使时令 S = { V0 },U = { 剩余顶点 },dist[ ] = { V0到各边的距离 } 。

2  从U中选取一个不在S中且距离值最小的顶点V,将W加入S。

3  对U中顶点的距离值dist[ ]进行修改

dist[i] = min( dist[v]+graph[v][i], dist[i] )    

4  重复 (2→3)  n-1次。


CodeDemo

import java.util.*;  
public class Test {  

    final static int MAXN = 100; // 最大顶点数 
    final static int MAXE = 10000000; // 使用Integer.MAX_VALUE有时会溢出
    static Scanner scan = new Scanner(System.in); // 获取控制台输入
    
    public static void main(String[] args) {  
    	/**
    	 * 初始化
    	 */
        int[][] graph = new int[MAXN][MAXN]; // 初始化图的领结矩阵  
        int[] dist = new int[MAXN]; // 记录最短路径  
        boolean[] S = new boolean[MAXN]; // 被访问过的顶点集   
        int n,m;   
        n = scan.nextInt(); // 顶点数 
        m = scan.nextInt(); // 边数 
        Arrays.fill(S, false); // 数组vis全部赋值为false 
        for(int i=0;idist[v]+graph[v][j]) {   
                    dist[j] = dist[v] + graph[v][j];  
                }  
            }  
        }  
        
        for(int i=0;i"+i+":"+dist[i]);  
        }
        
    }  
}  


你可能感兴趣的:(算法与数据结构)