Dijkstra 算法

来源:互联网 发布:基于java的2048小游戏 编辑:程序博客网 时间:2024/06/02 06:43

Dijkstra 算法:

import java.util.Arrays;public class Dijkstra {public static int[] dijkstra(int[][] graph,int start){int[] dis=new int[graph.length];boolean[] flag=new boolean[graph.length];Arrays.fill(dis,Integer.MAX_VALUE);dis[start]=0;flag[start]=true;for(int i=0;i<graph.length;i++){dis[i]=graph[start][i];}for(int k=0;k<graph.length-1;k++){int pos=-1;int min=Integer.MAX_VALUE;for(int i=0;i<dis.length;i++){if(!flag[i]&&dis[i]<min){pos=i;min=dis[i];}}if(pos==-1) return dis;flag[pos]=true;for(int i=0;i<dis.length;i++){if(graph[pos][i]!=Integer.MAX_VALUE&&dis[pos]+graph[pos][i]<dis[i]){dis[i]=dis[pos]+graph[pos][i];}}}return dis;}public static void main(String[] args) {int[][] edges={{1,2,10},{1,4,30},{1,5,100},{2,3,50},{3,5,10},{4,3,20},{4,5,60}};int[][] graph=new int[5][5];for(int i=0;i<graph.length;i++){Arrays.fill(graph[i],Integer.MAX_VALUE);graph[i][i]=0;}for(int i=0;i<edges.length;i++){graph[edges[i][0]-1][edges[i][1]-1]=edges[i][2];}int[] re=dijkstra(graph,0);System.out.println(Arrays.toString(re));//5//7//1 2 10//1 4 30//1 5 100//2 3 50//3 5 10//4 3 20//4 5 60}}


原创粉丝点击