Java无向无权图的最短路径怎么实现
发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,这篇文章主要讲解了"Java无向无权图的最短路径怎么实现",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Java无向无权图的最短路径怎么实现"吧!Dij
千家信息网最后更新 2025年12月02日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;iL=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安全错误
数据库的锁怎样保障安全
数据库专家需要具备哪些能力
工控软件开发前景
raid5服务器改硬盘
对计算机网络技术的意见
公安厅网络安全管理总队
网络安全漏洞有用吗
四川广电网络技术测试岗
延平区网络技术有限公司
jar运行久了写入数据库异常
网络安全概念股格尔软件
校盟互联网科技
北京互联网软件开发费用
mapper代理怎样连接数据库
社交软件开发风口在哪里
怎么用wps自动填充数据库
跨平台的桌面软件开发
应用软件开发成本预算表
拥有庞大数据库概率问题怎样解决
贵州销售软件开发外包
临床随访资料数据库
数据库显示文件夹被删除
韩国服务器因维护而脱机
网络安全基本知识
软件开发信息技术服务发票大类
数据库xml怎么导出
辽宁大型软件开发
数据库五版本不支持中文吗
adams如何添加数据库
深圳最新的网络安全政策
网络安全主题班级