迪杰斯特拉算法求最短路径java_改进的dijkstra算法 JAVA(两个顶点之间的最短路径)...

基本的dijkstra算法是求单源点到其余各点的最短路径,下面的dijkstra可以返回两个顶点之间的最短路径。返回数组里储存的是从起始顶点到结束顶点的最短路径经过的点的顺序。package airlineRouting;public class Dijkstra{public void dijkstra(int n, int v, int dist[], int prev[],int[][] c){ int maxint = Integer.MAX_VALUE;; boolean[] s = new boolean[n]; //记录该点是否被访问过 for(int i = 0; i < n; i++){ dist[i] = c[v][i]; //初始化 s[i] = false; if(dist[i] == maxint){ prev[i] = 0; } else{ prev[i] = v; //起始点 } } dist[v] = 0; s[v] = true; //被访问过 for(int i = 0; i < n+1; i++){ int temp = maxint; int u = v; for(int j = 0; j < n; j++){ if((!s[j]) && (dist[j] < temp)){ u = j; //得到最短路径的终点 temp = dist[j]; } } s[u] = true; for(int j = 0; j < n; j++){ if((!s[j]) && (c[u][j] < maxint)){ int newdist = dist[u] + c[u][j]; if (newdist < dist[j]){ dist[j] = newdist; //新的最短路径 prev[j] = u; //最短路径的上一个点 } } } }}public int[] shortestPath(Graphm G, int v1, int v2){int n = G.n();int q = 0;int[] way = new int[n];int[] dist = new int[n];int[] prev = new int[n];int[][] c = new int[n][n];//路径初始化for(int i = 0; i < n; i++){for(int j = 0; j < n; j++){c[i][j] = G.Matrix[i][j][0];}}//调用dijkstra算法,得到最短路dijkstra(n, v1, dist, prev,c );//得到路径int w = v2; while(w != v1){ q++; way[q] = prev[w]; w = prev[w]; } //得到正确顺序的路径 int[] ret = new int[q + 1]; int i, j; for(i = 0, j = q ; j >= 1; i++, j--){ ret[i] = way[j]; } //路径的终点 ret[i] = v2; return ret;}}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值