Dijkstra

匿名 (未验证) 提交于 2019-12-02 20:37:20

原创


 1 import java.util.*;  2   3 public class Dijkstra {  4       5     static int v;    //顶点  6     static int e;    //边  7     static int aim;    //aim与其余顶点的最短路径  8     static int matrix[][];    //邻接矩阵  9     static int book[];    //标记数组 10     static int dis[];    //存储与其他顶点的距离 11     static int min=99999; 12     static int inf=99999; 13  14     public static void main(String[] args) { 15         Scanner reader=new Scanner(System.in); 16         v=reader.nextInt(); 17         e=reader.nextInt(); 18         aim=reader.nextInt(); 19         matrix=new int[v+1][v+1];    //从1开始编号 20         book=new int[v+1]; 21         dis=new int[v+1]; 22         //矩阵初始化 23         for(int i=1;i<=v;i++) { 24             book[i]=0; 25             for(int j=1;j<=v;j++) { 26                 if(i==j) { 27                     matrix[i][j]=0; 28                 } 29                 else { 30                     matrix[i][j]=inf; 31                 } 32             } 33         } 34         book[aim]=1;    //求aim到其余顶点的距离 35         //读入边 36         for(int i=1;i<=e;i++) { 37             int first_City=reader.nextInt(); 38             int second_City=reader.nextInt(); 39             int value=reader.nextInt(); 40             matrix[first_City][second_City]=value;    //有向图 41         } 42         //数组dis初始化 43         for(int i=1;i<=v;i++) { 44             dis[i]=matrix[aim][i]; 45         } 46         for(int i=1;i<=v-1;i++) {    //循环v-1次,每次确认一个顶点 47             int u=-1; 48             min=inf; 49             //寻找距离aim最近的点 50             for(int j=1;j<=v;j++) { 51                 if(book[j]==0 && dis[j]<min) { 52                     min=dis[j]; 53                     u=j; 54                 } 55             } 56             if(u==-1) { 57                 break; 58             } 59             book[u]=1;    //确认顶点u 60             //松弛 61             for(int z=1;z<=v;z++) { 62                 if(matrix[u][z]<inf) { 63                     if(dis[z]>dis[u]+matrix[u][z]) {    //更新距离 64                         dis[z]=dis[u]+matrix[u][z]; 65                     } 66                 } 67             } 68         } 69         for(int i=1;i<=v;i++) { 70             System.out.print(dis[i]+" "); 71         } 72     } 73  74 }

14:32:02

2018-07-29

文章来源: Dijkstra
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!