Java无向无权图的最短路径怎么实现
发表于:2025-01-28 作者:千家信息网编辑
千家信息网最后更新 2025年01月28日,这篇文章主要讲解了"Java无向无权图的最短路径怎么实现",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Java无向无权图的最短路径怎么实现"吧!Dij
千家信息网最后更新 2025年01月28日Java无向无权图的最短路径怎么实现
这篇文章主要讲解了"Java无向无权图的最短路径怎么实现",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Java无向无权图的最短路径怎么实现"吧!
Dijkstra(迪杰斯特拉 权值都是正的)
是典型的单源最短路径算法,用于计算一个节点到其他所有节点的最短路径。主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止
算法的输入是:
有权(有向)图
起点(源)
所有边的权非负
算法的输出是:
起点(源)到其他各点的最短路径Floyd(弗洛伊德 可以带负权值)
是解决任意两点间的最短路径的一种算法,可以正确处理有向图或负权的最短路径问题,同时也被用于计算有向图的传递闭包。Floyd-Warshall算法的时间复杂度为O(N3),空间复杂度为O(N2)Bellman-Ford(伯尔曼 单源最短路径可以带负权值,比Dijkstra要广)
首先假设源点到所有点的距离为无穷大,然后从任一顶点u出发,遍历其它所有顶点vi,计算从源点到其它顶点vi的距离与从vi到u的距离的和,如果比原来距离小,则更新,遍历完所有的顶点为止,即可求得源点到所有顶点的最短距离。
4.无向无权图的最短路径算法
public class Dijkstra { static int max = Integer.MAX_VALUE; static int dist[] = new int[6]; static int prev[] = new int[6]; static int a[][] = { {0,max,10,max,30,100}, {max,0,5,max,max,max}, {max,max,0,50,max,max}, {max,max,max,0,max,10}, {max,max,max,20,0,60}, {max,max,max,max,max,0} }; void dijkstra(int v,int a[][], int dist[], int prev[]){ int n = dist.length - 1; boolean s[] = new boolean[n+1]; for (int i = 1; i<= n;i++){ dist[i] = a[v][i]; s[i] = false; if (dist[i] < Integer.MAX_VALUE) prev[i] = v; else prev[i] = -1; } dist[v] = 0; s[v] = true; for (int i=1;i<=n;i++){ int temp = Integer.MAX_VALUE; int u = v; for (int j =1; j<= n;j++){ if (!s[j] && dist[j](); private static int [][]Arcs={ {max,max,10,max,30,100}, {max,max,5,max,max,max}, {max,max,max,50,max,max}, {max,max,max,max,20,10}, {max,max,max,max,max,60}, {max,max,max,max,max,max} }; public void findCheapestPath(int begin,int end,int Arcs[][]){ floyd(Arcs); list.clear(); list.add(begin); findPath(begin,end); list.add(end); } public void findPath(int i,int j){ int k=path[i][j]; if(k==-1) return ; findPath(i,k); list.add(k); findPath(k,j); } public void floyd(int [][] Arcs){ int n=Arcs.length; for(int i=0;i L=f.list; System.out.print(i+"-->"+j+":"); if(f.dist[i][j]==max){ System.out.println("之间没有最短路径"); System.out.println(); } else{ System.out.println("的最短路径是:"); System.out.print(L.toString()+" "); System.out.println("路径长度:"+f.dist[i][j]); System.out.println(); } } }}=============import java.io.*;import java.util.*;public class bellmanford { final public static int MAX = 1000000000; // Short driver program to test the Bellman Ford's method. public static void main(String[] args) { // Read in graph. int[][] adj = new int[5][5]; Scanner fin = new Scanner(System.in); int numEdges = 0; for (int i = 0; i<25; i++) { adj[i/5][i%5] = fin.nextInt(); if (adj[i/5][i%5] != 0) numEdges++; } // Form edge list. edge[] eList = new edge[numEdges]; int eCnt = 0; for (int i = 0; i<25; i++) if (adj[i/5][i%5] != 0) eList[eCnt++] = new edge(i/5, i%5, adj[i/5][i%5]); // Run algorithm and print out shortest distances. int[] answers = bellmanford(eList, 5, 0); for (int i=0; i<5; i++) System.out.print(answers[i]+" "); System.out.println(); } // Returns the shortest paths from vertex source to the rest of the // vertices in the graph via Bellman Ford's algorithm. public static int[] bellmanford(edge[] eList, int numVertices, int source) { // This array will store our estimates of shortest distances. int[] estimates = new int[numVertices]; // Set these to a very large number, larger than any path in our // graph could possibly be. for (int i=0; i 感谢各位的阅读,以上就是"Java无向无权图的最短路径怎么实现"的内容了,经过本文的学习后,相信大家对Java无向无权图的最短路径怎么实现这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!
算法
顶点
无向
有向图
路径
长度
源点
学习
复杂
之间
内容
复杂度
节点
起点
问题
存储
典型
同时
就是
思路
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
全国网络安全技术比武
计算机网络安全技术与控制专业
中传黄玮 网络安全
调度算法软件开发
连云港软件开发优势
战地3怎么进官方服务器
软件开发项目制
机房服务器系统搭建
如何加强无线网络安全
数据库不用输密码就可以进去
天津警校网络安全监察专业
济南网络安全培训服务
软件开发过程分为四个阶段
西安柯竞网络技术有限公司
搭建企业内部数据库用什么软件
网站监控服务 软件开发
软件开发的职业理想
成都西辰软件开发有限公司
董监高的数据库在哪里查看
软件开发计划sdp模板
安仁软件开发培训班
全国网络安全技术比武
数据库语句显示月份
噬神者爆裂数据库
数据库求几个部门销售和
工控网络安全答题
pytest如何断言数据库数据
青少年网络安全教育知识竞赛
服务器管理总监
网络安全绘画图片背景