package utils; import org.apache.commons.lang3.StringUtils; import org.jgrapht.Graph; import org.jgrapht.alg.connectivity.BiconnectivityInspector; import org.jgrapht.graph.DefaultDirectedGraph; import org.jgrapht.graph.DefaultEdge; import java.util.Set; import java.util.stream.IntStream; /** * @ClassName: ConnectedGraphExample * @author kanpiaoxue * @version 1.0 * @CreateTime: 2019/07/12 11:13:16 * @Description: 连通图的示例 */ public class ConnectedGraphExample { public static final int ZERO = 0; /** * * @param args * @author kanpiaoxue * @CreateTime: 2019/07/12 11:13:16 */ public static void main(String[] args) { Graph<Integer, DefaultEdge> g = new DefaultDirectedGraph<Integer, DefaultEdge>(DefaultEdge.class); IntStream.rangeClosed(1, 13).forEach(v -> { g.addVertex(v); }); /** * <pre> * [示意图]:当前Graph是有向无环图(DAG),方向是:从上到下。 * -- predecessor:upstream * * 8 1 5 7 9 11 * | / | \ \ / | * 2 3 4 6 10 * | | * 12 | * \ | * 13 * * -- successor:downstream * * 也可以下载博客附件:连通图.drawio的压缩包,解压之后,登录 https://www.draw.io/ * 导入之后可以查看该图。或者查看代码上面的示意图。 * * </pre> */ g.addEdge(8, 2); g.addEdge(1, 2); g.addEdge(1, 3); g.addEdge(1, 4); g.addEdge(5, 6); g.addEdge(7, 6); g.addEdge(9, 10); g.addEdge(2, 12); g.addEdge(3, 13); g.addEdge(12, 13); // 双连通性检查器 BiconnectivityInspector<Integer, DefaultEdge> in = new BiconnectivityInspector<>(g); Set<Graph<Integer, DefaultEdge>> graphs = in.getConnectedComponents(); graphs.forEach(g1 -> { System.out.println(g1); }); /** * <pre> * ---> output * ([1, 2, 3, 4, 8, 12, 13], [{1,2}, {1,3}, {1,4}, {8,2}, {12,13}, {2,12}, {3,13}]) * ([5, 6, 7], [{5,6}, {7,6}]) * ([9, 10], [{9,10}]) * ([11], []) * </pre> */ System.out.println(StringUtils.repeat("=", 100)); Graph<Integer, DefaultEdge> g11 = in.getConnectedComponent(11); System.out.println(g11); /** * <pre> * ---> output * ([11], []) * </pre> */ System.out.println(StringUtils.repeat("=", 100)); Graph<Integer, DefaultEdge> g2 = in.getConnectedComponent(2); System.out.println(g2); /** * <pre> * ---> output * ([1, 2, 3, 4, 8, 12, 13], [{1,2}, {1,3}, {1,4}, {8,2}, {12,13}, {2,12}, {3,13}]) * </pre> */ } }
相关推荐
jGraph 的自动布局解决方案可以通过 draw2d 的算法来实现,并且可以解决回路和非连通图的问题,具有高度的实用性和灵活性。 知识点: 1. jGraph 的基本概念和应用领域 2. jGraph 的自动布局解决方案 3. draw2d ...
本手册旨在为用户提供全面的JGraph使用指南,包括安装配置、基础操作、高级特性等方面的内容。阅读本手册前,建议具备一定的Java编程基础。 ##### 3.1 预备知识(Pre-requisites for this Manual) - Java基础知识...
它提供了丰富的功能,让开发者能够轻松地构建可交互的、动态的图形模型,适用于数据可视化、流程图、组织结构图等多种场景。JGraph不仅支持基本的图形绘制,还支持拖放操作、事件处理、布局算法等高级特性,使得图形...
《JGraph 使用手册》 **一、引言** 在当今数据密集型的世界中,图形(Graph)不仅是数据可视化的重要工具,也是数据结构和算法研究的关键领域。JGraph,一款由JGraph Ltd.开发的高性能图形编辑和展示组件,旨在...
1. **note.docx**:可能包含个人笔记、额外示例或对JGraph使用的一些见解和心得。 2. **The JGraph Tutorial.docx**:完整版的JGraph教程文档,提供详细的步骤和代码实例。 3. **JGraph手册.pdf**:官方JGraph手册的...
这个压缩包“jgraph源码+例子”包含的是JGraph库的源代码以及相关的示例,对于学习和理解JGraph的内部工作原理以及如何在自己的项目中使用它非常有帮助。 JGraph的核心功能包括: 1. **图形绘制**:JGraph允许...
用户可以点击、拖动、缩放和旋转图形,这使得jgraph在创建流程图、网络拓扑图和状态机等需要用户参与的应用中特别有用。 5. **事件处理:** jgraph允许开发者绑定自定义事件处理器,以便在用户与图形交互时执行...
文件名"Jgraph"可能是指JGraph的示例代码或者文档,通过查看这个文件,你可以学习如何使用JGraph库来创建和管理有向图,包括导入和导出数据、添加和删除节点、应用不同的布局策略以及处理用户交互等。 总的来说,...
压缩包中的"JGraph doc"文件可能是JGraph的官方文档,包括详细的API参考、示例代码和教程,是学习和使用JGraph的重要资料。通过阅读这些文档,可以深入理解JGraph的功能,并学会如何在自己的项目中有效利用它。 ...
JGraph 是一款强大的图形库,主要用于创建流程图和其他类型的图形可视化应用。它为开发者提供了丰富的功能,包括图形的创建、编辑、布局以及交互性。在本文中,我们将深入探讨 JGraph 的核心概念、使用方法以及如何...
- **图形分析**:利用jgraph提供的API,开发者可以进行图形的深度分析,如路径查找、连通性分析等。 - **1.3 关于本手册** - **先决条件**:学习本手册之前,建议读者具备一定的Java编程基础。 - **获取帮助**:...
文档覆盖了jgraph的基本概念、使用方法以及高级特性,对于希望深入理解jgraph的开发者来说是不可或缺的资源。 #### 二、什么是jgraph? jgraph主要功能在于提供了一种灵活的方式来创建和编辑图(graphs)。这里的“图...
JGraph 有多个版本,其中 JGraphX(也称为 JGraph Swing)是面向 Swing 应用程序的版本,而 JGraphT 则专注于图理论和算法。JGraph 还有一个开源社区,提供了许多扩展和示例。 **2. JGraph 的图形应用** JGraph 的...
"JGraph小例子加jar包"这个主题意味着我们将探讨如何使用JGraph库,并通过查看其提供的示例代码来学习和理解其核心功能。 首先,JGraph的核心组件是mxGraph,这是一个灵活且高度可定制的图形编辑框架。它支持各种...
JGraph广泛应用于数据可视化、流程图、网络拓扑图、uml图等场合,尤其是在需要用户交互编辑图形的软件中。例如: - **项目管理工具**:用于展示项目任务间的依赖关系。 - **数据库设计工具**:展示数据库表之间的...
JGraph组件下载 JGraph.jar组件下载 javabean组件下载 图像绘制javabean
使用jgraph-draw.io创建流程图的过程通常包括以下几个步骤: 1. **启动应用**:访问jgraph-draw.io的网站或本地部署的应用,进入编辑界面。 2. **选择模板**:根据需求,选择合适的流程图模板或从头开始创建。 3. *...
**正文** 标题“jgraph源代码”所提及的“jgraph”,是一个开源的图形组件库,主要用于Java Swing应用...对于希望提升Java应用视觉表现力和交互性的开发者来说,理解和使用JGraph及其扩展库是一项非常有价值的技能。
这里提到的“图”是指图论中的定义,而不是函数图像。 在设计与实现JGraph时,遵循了以下原则: - **全Swing兼容性**:确保JGraph可以无缝集成到任何基于Swing的应用程序中。 - **清晰高效的设计**:设计简洁明了...
**JGRAPH开发jar详解** JGRAPH是一款强大的图形库,主要用于Java平台上的...无论是数据分析的可视化展示,还是流程图的绘制,JGRAPH都能够满足需求,并且提供了足够的定制空间,让开发者能够打造出个性化的图形界面。