<pre name="code" class="java">/* * 设置一个U集合,包括最小路径长度和上一个结点 * V-U集合表示还没有进行调整 * 把V-U集合逐渐增加U中。并调整最小路径 * */ public class Dijkstra { private static int MAX = 10000; public static void dijkstra(GraphMatrix grap, Path dist[]){ // 初始化V0 init(grap,dist); int n = dist.length; int minw = MAX; int mv = 0; for(int i=1;i<n;i++){ int j; //找出和V0距离近期的顶点mv for(j=1;j<n;j++){ if(grap.arcs[j][j]==0 && dist[j].length<MAX){ mv=j; minw = dist[j].length; } } if(mv == 0) break; grap.arcs[mv][mv]=1; //把顶点mv增加U中 //调整V-U中已知的最短路径 for(j=1;j<n;j++){ if(grap.arcs[j][j]==0 && dist[j].length > dist[mv].length + grap.arcs[mv][j]){ dist[j].length = dist[mv].length + grap.arcs[mv][j]; dist[j].pre = mv; } } } }