单源最短路径( Dijkstra算法)JAVA实现
来源:互联网 发布:淘宝几块一只的人参 编辑:程序博客网 时间:2024/05/16 16:09
单源最短路径( Dijkstra算法)JAVA实现
package dijkstra;public class Graph {final int max=100;/* * 顶点节点 */public class VexNode{int adjvex;int data;}VexNode[] vexNodes;int[] thevexs; //顶点集合int[][] edges = new int[max][max]; //边集合/* * 创建图 */public void createGraph(Graph graph,int[][] A,int[] vexs) {thevexs=vexs;for (int i = 0; i < vexs.length; i++) { for (int j = 0; j < vexs.length; j++) { graph.edges[i][j] = A[i][j];}}}/* * 输出图 */public void printGraph(Graph graph) {for (int i = 0; i < graph.thevexs.length; i++) {for (int j = 0; j < graph.thevexs.length; j++) {//没有路径则输出/if (graph.edges[i][j]==1000) {System.out.printf("%4s","/"); }else {System.out.printf("%4d",graph.edges[i][j]);}}System.out.println("\n");}}}
package dijkstra;public class DijkStra {final int max = 100; public static int[] Dijsktra(Graph graph,int start){ //接受一个有向图的权重矩阵,和一个起点编号start(从0编号,顶点存在数组中) //返回一个int[] 数组,表示从start到它的最短路径长度 int n = graph.thevexs.length; //顶点个数 int[] shortPath = new int[n]; //存放从start到其他各点的最短路径 String[] path=new String[n]; //存放从start到其他各点的最短路径的字符串表示 for(int i=0;i<n;i++) path[i]=new String(start+"-->"+i); int[] visited = new int[n]; //标记当前该顶点的最短路径是否已经求出,1表示已求出 //初始化,第一个顶点求出 shortPath[start] = 0; visited[start] = 1; for(int count = 1;count <= n - 1;count++) //要加入n-1个顶点 { int k = -1; //选出一个距离初始顶点start最近的未标记顶点 int dmin = Integer.MAX_VALUE; for(int i = 0;i < n;i++) { if(visited[i] == 0 && graph.edges[start][i]<dmin) { dmin = graph.edges[start][i]; k = i; } } System.out.println("k="+k); //将新选出的顶点标记为已求出最短路径,且到start的最短路径就是dmin shortPath[k] = dmin; visited[k] = 1; //以k为中间点,修正从start到未访问各点的距离 for(int i = 0;i < n;i++) { // System.out.println("k="+k); if(visited[i] == 0 && graph.edges[start][k] + graph.edges[k][i] < graph.edges[start][i]){ graph.edges[start][i] = graph.edges[start][k] + graph.edges[k][i]; path[i]=path[k]+"-->"+i; } } } for(int i=0;i<n;i++) System.out.println("从"+start+"出发到"+i+"的最短路径为:"+path[i]); System.out.println("====================================="); return shortPath; } }
package dijkstra;public class Test {public static void main(String[] args) {final int INF = 1000;int[] vexs = {0,1,2,3,4,5};int[][] A ={{0,50,10,INF,INF,INF},{INF,0,15,50,10,INF},{20,INF,0,15,INF,INF},{INF,20,INF,0,35,INF},{INF,INF,INF,30,0,INF},{INF,INF,INF,3,INF,0},};Graph graph = new Graph();graph.createGraph(graph, A, vexs);graph.printGraph(graph);DijkStra dijkStra = new DijkStra();int[] shortPath = dijkStra.Dijsktra(graph, 2); for(int i = 0;i < shortPath.length;i++) if (shortPath[i]!=INF) { System.out.println("从"+"2"+"出发到"+i+"的最短距离为:"+shortPath[i]); } } }
阅读全文
0 0
- 单源最短路径( Dijkstra算法)JAVA实现
- 单源最短路径( Dijkstra算法)JAVA实现
- 单源最短路径( Dijkstra算法)JAVA实现
- 单源最短路径Dijkstra算法(java实现)
- 算法java实现--贪心算法--单源最短路径问题--Dijkstra算法
- 单源最短路径(dijkstra算法)php实现
- Dijkstra算法实现单源最短路径
- 单源最短路径 dijkstra算法实现
- 【matlab dijkstra单源最短路径算法】dijkstra单源最短路径算法实现
- Java实现Dijkstra单源最短路径
- Dijkstra算法求单源最短路径Java实现
- 贪心算法实例 单源最短路径 Dijkstra算法(c++实现)
- Dijkstra算法(单源最短路径)
- Dijkstra算法(单源最短路径)
- Dijkstra算法(单源最短路径)
- Dijkstra算法(单源最短路径)
- 单源最短路径(Dijkstra算法)
- Dijkstra算法(单源最短路径)
- <最新资讯> AlphaGo Vs 柯洁第一局视频分享
- React学习DAY1
- debian 8 64环境下的Qt on Android安装
- Mybatis 中 #{} 与 ${} 的区别
- 给定一个经过一次旋转的有序数组,从中查找一个值,若存在返回它的索引,不存在返回-1,假定数组存在重复元素
- 单源最短路径( Dijkstra算法)JAVA实现
- 文章标题
- NLP-百度自然语言python包安装
- selenium报错记录
- [paper] Meta-Learner LSTM
- mysql主主复制(双主复制)配置步骤
- linux 网卡bond
- html和xml的区别
- 汇编语言 实验10.1 显示字符串