本文共 1042 字,大约阅读时间需要 3 分钟。
刚开始学dijkstra算法的时候,写过一篇关于dijkstra算法的博客,留下的QQ,结果很多人来询问。
后来,发现那个代码写得实在是太难看了,于是把代码重新整理了一下,贴上来吧。数据还是 里面的数据。
- import java.util.Arrays;
-
-
-
- public class Dijkstra {
- private static final int inf=Integer.MAX_VALUE;
- public static int[] dijkstra(int[][] graph,int n,int u){
- int dist[]=new int[n];
- boolean s[]=new boolean[n];
- Arrays.fill(s, false);
- Arrays.fill(dist, inf);
- int min,v;
- for(int i=0;i<n;i++){
- dist[i]=graph[u][i];
- }
- s[u]=true;
- while(true){
- min=inf;v=-1;
-
- for(int i=0;i<n;i++){
- if(!s[i]){
- if(dist[i]<min){min=dist[i];v=i;}
- }
- }
- if(v==-1)break;
-
- s[v]=true;
- for(int i=0;i<n;i++){
- if(!s[i]&&
- graph[v][i]!=inf&&
- dist[v]+graph[v][i]<dist[i]){
- dist[i]=dist[v]+graph[v][i];
- }
- }
- }
- return dist;
- }
- public static void main(String[] args) {
- int[][] W = {
- { 0, 1, 4, inf, inf, inf },
- { 1, 0, 2, 7, 5, inf },
- { 4, 2, 0, inf, 1, inf },
- { inf, 7, inf, 0, 3, 2 },
- { inf, 5, 1, 3, 0, 6 },
- { inf, inf, inf, 2, 6, 0 } };
-
- int[] dist=dijkstra(W, 6, 0);
- for (int i : dist) {
- System.out.print(i+" ");
- }
- System.out.println();
- }
- }
转载地址:http://gexfa.baihongyu.com/