首页 > 代码库 > Dijkstra算法 java实现
Dijkstra算法 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; for(j=1;j<n;j++){ if(grap.arcs[j][j]==0 && dist[j].length<MAX){ mv=j; minw = dist[j].length; grap.arcs[mv][mv]=1; } } if(mv == 0) break; 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; } } } } // 初始化,把V0放入U中,矩阵对角线为1表示在U中 private static void init(GraphMatrix grap, Path[] dist) { // TODO Auto-generated method stub for(int i=0;i<dist.length;i++){ grap.arcs[0][0] = 1; //表示v0进入U集合中 dist[i].length = grap.arcs[0][i]; if(grap.arcs[0][i]!=MAX){ dist[i].pre = 0; }else{ dist[i].pre = -1; } } } } class GraphMatrix{ int[] vrcs; int[][] arcs; } class Path{ int length; int pre; }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。