耿老师教你学Java:图图学JGraphT开源框架第11回
创始人
2025-03-09 11:13:08

摘要:图图学JGraphT开源框架是教材《数据结构与算法》-java语言版(清华大学出版社-2024,耿祥义,张跃平)第13章《图论》的课外读物(共计19回25个实例),所以主要围绕教材的内容学习JGraphT开源框架,即学JGraphT开源框架中最重要的部分,不是学习JGraphT开源框架的全部内容(JGraphT开源框架封装关于最短路径的算法类就有30多个)。掌握这里的这些内容,也可以让我们在实际项目更加容易地使用图论的算法,这也正是框架的目的。 图图学开源JGraphT开源框架目录如下:

图图学开源JGraphT的第11回-《最短路径和FloydWarshallShortestPaths类》,这回学习的主要内容是:

  • 最短路径

  • FloydWarshallShortestPaths类

一、最短路径

GraphPath接口实现GraphPath接口的对象用于存储路径,也见第6回(包括非简单路径),接口的方法如下:

defaultjava.util.List getEdgeList:返回构成路径的全部边。 V getEndVertex:返回路径中的终点顶点。 defaultintgetLength:返回路径的长度,以边的数量来衡量。 V getStartVertex:返回路径中的起点顶点。 defaultjava.util.List getVertexList:将路径中的顶点序列。 doublegetWeight:返回分配给该路径的权重(路径中边的权重之和)

二、FloydWarshallShortestPaths类

Floyd 算法封装在FloydWarshallShortestPaths类中,并给出说明:Floyd - Warshall算法能在O(n^3),n的三次方(n是顶点数目)的时间复杂度内找出所有的最短路径(共计n^2 条)。FloydWarshallShortestPaths在构造对象时,不会进行任何计算!所有的计算都在首次调用该类的某个成员方法时进行。计算结果会被存储起来,因此后续对同一方法的所有调用在计算效率上都较高。

// 创建 FloydWarshallShortestPaths 实例 FloydWarshallShortestPaths floydWarshall = new FloydWarshallShortestPaths<>(graph); // 获取指定顶点对之间的最短路径长度 String source= "A"; String target = "D"; // 获取指定顶点对之间的最短路径 GraphPath shortestPath = floydWarshall.getPath(source, target); if(shortestPath != null) { System.out.println("从顶点 "+ source+ " 到顶点 "+ target + " 的最短路径是: "+ shortestPath.getVertexList); } else{ System.out.println("从顶点 "+ source+ " 到顶点 "+ target + " 不存在路径。"); }

四、代码与效果

将jgrapht-1.5.2.zip解压后的lib文件夹复制到C:\studyJGrapht,然后在命令行进入开发目录C:\studyJGrapht。(C:\studyJGrapht是作者使用的开发目录,您可以使用任何自己喜欢的开发目录或名称)。

例子11.1 floyd最短路径(效果如图11.1)

求下列有向网络的所有顶点到顶点的最短路径。

如下编译运行代码。

C:\studyJGrapht>javac -cplib\*;. Ex13_1.java C:\studyJGrapht>java -cplib\*;. Ex13_1

图11.1 floyd最短路径

Ex11_1.java

importorg.jgrapht.Graph; importorg.jgrapht.GraphPath; importorg.jgrapht.alg.shortestpath.FloydWarshallShortestPaths; importorg.jgrapht.graph.DefaultWeightedEdge; importorg.jgrapht.graph.SimpleDirectedWeightedGraph; importjava.util.*; public classEx11_1{ public static void main(String[] args) { // 创建一个有向带权图 Graph graph = new SimpleDirectedWeightedGraph<>(DefaultWeightedEdge.class); // 添加顶点 graph.addVertex("A"); graph.addVertex("B"); graph.addVertex("C"); graph.addVertex("D"); // 添加边并设置权重 graph.setEdgeWeight(graph.addEdge("A", "B"), 12); graph.setEdgeWeight(graph.addEdge("B", "C"), 1); graph.setEdgeWeight(graph.addEdge("C", "D"), 3); graph.setEdgeWeight(graph.addEdge("A", "D"), 10); graph.setEdgeWeight(graph.addEdge("D", "B"), 1); // 创建 FloydWarshallShortestPaths 实例 FloydWarshallShortestPaths floydWarshall = new FloydWarshallShortestPaths<>(graph); // 获取图的所有顶点 List vertices = new ArrayList<>(graph.vertexSet); // 遍历每对不同的顶点 for(inti = 0; i < vertices.size; i++) { for(intj = 0; j < vertices.size; j++) { if(i != j) { String source = vertices.get(i); String target = vertices.get(j); // 获取指定顶点对之间的最短路径 GraphPath shortestPath = floydWarshall.getPath(source, target); if(shortestPath != null) { System.out.println(source + " 到 "+ target + " 的最短路径:"); printPath(shortestPath); System.out.print(shortestPath.getEdgeList);//JGraphT的默认格式里是冒号 System.out.println("(路径权重:"+shortestPath. getWeight+")"); } } } } } // 打印最短路径及其权重的方法 public static void printPath(GraphPath shortestPath) { List vertexList = shortestPath.getVertexList; StringBuilder pathStr = new StringBuilder; for(inti = 0; i < vertexList.size; i++) { pathStr.append(vertexList.get(i)); if(i < vertexList.size - 1) { pathStr.append(" -> "); } } System.out.println(pathStr + "(路径权重:"+ shortestPath.getWeight+")"); } }
⚠️
本网站信息内容及素材来源于网络采集或用户发布,如涉及侵权,请及时联系我们,发送链接至2697952338@QQ.COM,我们将第一时间进行核实与删除处理。

相关内容

热门资讯

智核投研商学院摇号琦白久(骐佰... 本文旨在进行投资风险教育,不针对任何特定企业。以下案例为拟情景,如有雷同纯属巧合在股票投资交流中,“...
中融资本陈彦君、毕有财老师讲课... “本文旨在进行投资风险教育,不针对任何特定企业。以下案例为拟情景,如有雷同纯属巧合。"“买酒、买原液...
百谷.言(四川)供应链管理有限... “本文旨在进行投资风险教育,不针对任何特定企业。以下案例为拟情景,如有雷同纯属巧合。" 在数字经济浪...
精英汇课堂公开抽签深圳兰亭网络... 本文旨在进行投资风险教育,不针对任何特定企业。以下案例为拟情景,如有雷同纯属巧合。在金融投资市场中,...
湖南恩松生物科技有限公司策马奔... 本文旨在进行投资风险教育,不针对任何特定企业。以下案例为拟情景,如有雷同纯属巧合近年来,以“直播间荐...
财合联盟陕西三八妇乐一级市场战... 本文旨在进行投资风险教育,不针对任何特定企业。以下案例为拟情景,如有雷同纯属巧合。在股票投资领域,“...
河南宸.邦租赁悦享算力服务器、... 本文旨在进行投资风险教育,不针对任何特定企业。以下案例为拟情景,如有雷同纯属巧合。在投资陷阱不断翻新...
中志浩刺梨“刺梨富硒原液”“刺... 本文旨在进行投资风险教育,不针对任何特定企业。以下案例为拟情景,如有雷同纯属巧合。近年来,“购买指定...
曝光』北京指南针科技靠谱吗?背... 曝光』北京指南针科技靠谱吗?背后圈套细思极恐!股友愤怒不已!已维权退费!投资有风险,投资需谨慎!针对...
中赢财经商学院首席老师经销商童... 本文旨在进行投资风险教育,不针对任何特定企业。以下案例为拟情景,如有雷同纯属巧合。 在全民投资理财意...
老刘堂主、同心同德大课堂袁光文... 本文旨在进行投资风险教育,不针对任何特定企业。以下案例为拟情景,如有雷同纯属巧合。​当前,以“直播间...
贵州中科分子生物科技有限公司打... 本文旨在进行投资风险教育,不针对任何特定企业。以下案例为拟情景,如有雷同纯属巧合随着网络直播的普及,...
杭州顶点财经推荐股票是真的吗?... 杭州顶点财经推荐股票是真的吗?揭穿投顾黑幕!合法拿回自己的血汗钱! 投资本是一场自我的修行,只有起点...
筑梦学员计划直播间摇号中签经销... 本文旨在进行投资风险教育,不针对任何特定企业。以下案例为拟情景,如有雷同纯属巧合。​随着国民财富稳步...
转账西安厚德丰源商贸有限公司认... 本文旨在进行投资风险教育,不针对任何特定企业。以下案例为其他类似股权情景,如有雷同纯属巧合。随着生活...
小鹅直播间灯塔驿站旭东直播间战... 本文旨在进行投资风险教育,不针对任何特定企业。以下案例为拟情景,如有雷同纯属巧合。当“成为战略经销商...
龙马工会-公益课直播间旭东老师... 本文旨在进行投资风险教育,不针对任何特定企业。以下案例为拟情景,如有雷同纯属巧合。在资本市场多元化发...
刺.梨工坊(贵州)科技有限公司... “本文旨在进行投资风险教育,不针对任何特定企业。以下案例为拟情景,如有雷同纯属巧合。"当白酒消费与原...
深圳市琦白久商业管理有限公司成... “本文旨在进行投资风险教育,不针对任何特定企业。以下案例为拟情景,如有雷同纯属巧合。"投资市场中,各...
曝光』北京指南针科技收费投顾服... 曝光』北京指南针科技收费投顾服务缩水?主动维权导性宣传欺骗股民已退费!投资有风险,投资需谨慎!针对网...
上海凯石投顾实战训练营不靠谱,... 上海凯石投顾实战训练营不靠谱,荐股收割股民真相曝光凯石证券不可信,推荐的股票不靠谱,交的服务费是可以...
老刘堂主、同心同德大课堂袁光文... 本文旨在进行投资风险教育,不针对任何特定企业。以下案例为拟情景,如有雷同纯属巧合。对于缺乏专业投资经...
方舟创富会直播间常红老师,林邵... 本文旨在进行投资风险教育,不针对任何特定企业。以下案例为拟情景,如有雷同纯属巧合。在资本浪潮涌动的当...
WA微.点.码运营商、WA微.... 本文旨在进行投资风险教育,不针对任何特定企业。以下案例为拟情景,如有雷同纯属巧合。当下,不少股票直播...
常阳公益会旭东老师兰亭科技“兰... 本文旨在进行投资风险教育,不针对任何特定企业。以下案例为拟情景,如有雷同纯属巧合。在金融投资市场中,...