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]!=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
}
}