package dijkstra.org;
public class dijkstra {
// int arr[ ][ ]=new int [6][6];
static int[][] arr = { { 1000000, 1000000, 10, 100000, 30, 100 },
{ 1000000, 1000000, 5, 1000000, 1000000, 1000000 },
{ 1000000, 1000000, 1000000, 50, 1000000, 1000000 },
{ 1000000, 1000000, 1000000, 1000000, 1000000, 10 },
{ 1000000, 1000000, 1000000, 20, 1000000, 60 },
{ 1000000, 1000000, 1000000, 1000000, 1000000, 1000000 } };
//static int path[] = new int[6];
static int min(int a, int b) {
return a < b ? a : b;
}
public static void main(String[] args) {
int newid = 0;
int min = 1000000;
int book[] = new int[6];
int dis[] = new int[6];
int way[]=new int[6];
int start = 0;
for (int i = 0; i < 6; i++) {
book[i] = 0;
dis[i] = arr[start][i];
way[i]=start;
}
//int oldid=start;
for (int ii = 0; ii < 5; ii++) {
min = 1000000;
for (int i = 1; i < 6; i++)
if (book[i] == 0 && dis[i] < min) {
min = dis[i];
newid = i;
// newid=path2[i];
}
book[newid] = 1;
//way[oldid]=newid;
//oldid=newid;
//path[newid] = min;
// System.out.println();
// System.out.print(newid+" "+path[newid]);
for (int i = 1; i < 6; i++)
if (book[i] == 0 && arr[newid][i] < 1000000) {
// System.out.print("---");
if(dis[i]> min + arr[newid][i])
way[i]=newid;
dis[i] = min(dis[i], min + arr[newid][i]);
}
// System.out.println();
// for(int i=1;i<6;i++)
// System.out.print(dis[i]+" ");
}
//System.out.println();
for (int i = 0; i < 6; i++)
System.out.print(dis[i] + " ");
System.out.println();
int i=0;
int arr[ ]=new int[6];
for(int j=1;j<6;j++)
{ i=j; int ind=0;
System.out.print(start+"---"+j+"---->距离: "+dis[j]+" 路径 ");
arr[ind++]=j;
//System.out.print(j+" ");
while(way[i]!=start)
{ arr[ind++]=way[i];
///System.out.print(way[i] + " ");
i=way[i];
}
arr[ind++]=start;
//System.out.print(start +" ");
while(ind>0)
System.out.print(arr[--ind] +" ");
System.out.println( );
}
}
}