`
kanpiaoxue
  • 浏览: 1781711 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

jgrapht示例

 
阅读更多

 

官网文档地址: https://jgrapht.org/guide/UserOverview

 

import org.apache.commons.lang3.StringUtils;
import org.jgrapht.Graph;
import org.jgrapht.GraphPath;
import org.jgrapht.Graphs;
import org.jgrapht.alg.cycle.CycleDetector;
import org.jgrapht.alg.shortestpath.DijkstraShortestPath;
import org.jgrapht.graph.DefaultDirectedGraph;
import org.jgrapht.graph.DefaultEdge;
import org.jgrapht.traverse.BreadthFirstIterator;
import org.jgrapht.traverse.DepthFirstIterator;

import java.util.Iterator;

/**
 * @ClassName: Test
 * @author kanpiaoxue
 * @version 1.0
 * @CreateTime: 2018/12/06 10:08:24
 * @Description: jgrapht 示例
 * 
 *               <dependency>
 *               <groupId>org.jgrapht</groupId>
 *               <artifactId>jgrapht-core</artifactId>
 *               <version>1.3.0</version>
 *               </dependency>
 */
public class JgraphtExample {

    /**
     *
     * @param args
     * @author kanpiaoxue
     * @throws Exception
     * @CreateTime: 2018/12/06 10:08:24
     */
    public static void main() throws Exception {
        String a = "A";
        String b = "B";
        String c = "C";
        String d = "D";
        String e = "E";
        String f = "F";

        // 构建图
        Graph<String, DefaultEdge> g = new DefaultDirectedGraph<>(DefaultEdge.class);
        // 添加顶点
        g.addVertex(a);
        g.addVertex(b);
        g.addVertex(c);
        g.addVertex(d);
        g.addVertex(e);
        g.addVertex(f);
        // 添加边
        g.addEdge(a, b);
        g.addEdge(a, c);
        g.addEdge(b, d);
        g.addEdge(c, e);
        g.addEdge(d, f);
        g.addEdge(e, f);

        // 度
        System.out.println(g.degreeOf(a)); // 出度 output: 2
        System.out.println(g.inDegreeOf(a)); // 入度 output: 0
        System.out.println(g.outDegreeOf(a)); // 入度 output: 2

        // Graphs 工具类
        // 当前顶点的后续节点列表 output: [B, C]
        System.out.println(Graphs.successorListOf(g, a));
        // 当前顶点的后续节点列表 output: [D, E]
        System.out.println(Graphs.predecessorListOf(g, f));

        // 图的遍历
        // --深度优先遍历
        Iterator<String> depthFirstIterator = new DepthFirstIterator<>(g, a);
        while (depthFirstIterator.hasNext()) {
            String p = depthFirstIterator.next();
            System.out.println(p);
            /*
             * <pre>
             * A
             * C
             * E
             * F
             * B
             * D
             * </pre>
             */
        }
        System.out.println(StringUtils.center("split", 100, "=")); // 分割线
        // --广度优先遍历
        Iterator<String> breadthFirstIterator = new BreadthFirstIterator<>(g, a);
        while (breadthFirstIterator.hasNext()) {
            String p = breadthFirstIterator.next();
            System.out.println(p);
            /*
             * <pre>
             * A
             * B
             * C
             * D
             * E
             * F
             * </pre>
             */
        }

        // 图中“环”的操作
        CycleDetector<String, DefaultEdge> cycleDetector = new CycleDetector<>(g);
        // 探测图中是否有环 output: false
        System.out.println(cycleDetector.detectCycles());
        // 找出图中的环 output: []
        System.out.println(cycleDetector.findCycles());

        // 最短路径
        GraphPath<String, DefaultEdge> path = DijkstraShortestPath.findPathBetween(g, a, f);
        // [A, B, D, F]
        System.out.println(path.getVertexList());
        DijkstraShortestPath<String, DefaultEdge> dijkstraAlg = new DijkstraShortestPath<>(g);
        // [A, B, D, F]
        GraphPath<String, DefaultEdge> path1 = dijkstraAlg.getPath(a, f);
        System.out.println(path1.getVertexList());

    }
}

 

 

分享到:
评论

相关推荐

    java jgrapht包

    在`jgrapht-0.8.0`这个版本中,可能包含了库的源代码、文档、示例程序和必要的依赖库。通过查看和学习这些内容,开发者可以深入了解JGrapht的工作原理,并在自己的项目中有效地利用这个强大的图形处理工具。 总的来...

    JGraphT-开源

    6. **丰富的API**:提供全面的API文档和示例代码,帮助开发者快速上手并进行高效的开发。 **使用场景:** 1. **网络建模**:例如计算机网络、社交网络分析等,可以使用JGraphT构建和分析网络结构。 2. **数据可视化...

    JGraphT:一个免费的Java类库-开源

    5. **API友好**:其API设计简洁明了,易于理解和使用,同时提供了丰富的示例代码和文档,便于开发者快速上手。 **应用领域** 1. **网络分析**:JGraphT常用于分析社交网络、计算机网络或其他复杂系统的连接结构。 ...

    jgrapht-routing:基于JGraphT的Java路由机

    查询示例 使用客户端: 找到里昂(4.834413,45.767304)附近最近的网络节点: http GET :8080/routing/api/v1/distance lon==4.834413 lat==45.767304 返回一个GeoJSON Point: { " geometry " : { " ...

    Graph:jgrapht - 0.9.0 版 - Maven 2 Eclipse -(供内部使用)

    文档通常会指导如何安装、配置和使用这个库,而示例项目则展示了如何在实际应用中应用JGraphT的功能。 对于Java开发者来说,掌握JGraphT可以帮助他们更有效地处理涉及图数据结构的问题,比如在网络路由、社交网络...

    jungrapht-visualization:来自Java Universal Network Graph的可视化和示例代码,已移植为使用JGraphT模型和算法

    JUNGRAPHT可视化:对可视化和示例代码进行了现代化并移植为使用图形和算法JUNGRAPHT-VISUALIZATION可以用于渲染以下任何内容: org.jgrapht.Graph ...包括用于可视化的R * Tree,用于强制控制布局的Barnes-Hut Quad ...

    基于java的图形组件 JGraph.zip

    这些示例通常展示了如何创建基本的图形、添加交互功能、应用布局算法以及使用JGraphT扩展功能。通过学习和分析这些示例,开发者可以深入理解JGraph的工作原理,并将其应用到自己的项目中。 在实际开发中,JGraph常...

    基于Java的绘图框架 JGraphEd.zip

    开发者可以通过阅读JGraphT和JGraphEd的官方文档,参加相关的在线课程,或者参考社区的示例代码来提高使用效率。 总结来说,JGraphEd是一个强大的Java绘图框架,它结合了JGraphT的图处理能力和友好的用户界面,为...

    Java数据可视化库概述及实战案例:主流库比较与应用场景

    内容概要:本文全面介绍了 Java数据可视化的几个主流库,包括 JFreeChart、JavaFX、XChart、JGraphT 和 JUNG,探讨了它们的特点和使用场景。通过多个示例代码,展示了如何使用这些库创建不同类型的图表,例如柱状图...

    Jgraph中文讲义

    JGraph 有多个版本,其中 JGraphX(也称为 JGraph Swing)是面向 Swing 应用程序的版本,而 JGraphT 则专注于图理论和算法。JGraph 还有一个开源社区,提供了许多扩展和示例。 **2. JGraph 的图形应用** JGraph 的...

    关系图

    在Java中,JGraphT是一个常用的选择,而在JavaScript中,D3.js或cytoscape.js等库可以实现交互式的关系图展示。 总结来说,关系图是理解和表达复杂系统之间关系的重要工具,它在多个IT领域都有应用。通过源码和工具...

    MENHBSA4SWSC

    标题 MEEDA算法的源代码 入门 这些说明将为您提供在本地计算机上运行的项目的... 要通过五个执行者来执行以运行jar文件:运行jar的命令行示例为java -jar MENHBSA4SWSC.jar out.stat problem.xml service-out.XML tax

    图数据结构-图结构的描述

    工具有助于简化这些操作,例如图论库如NetworkX(Python)或JGraphT(Java)提供了丰富的功能来创建、操作和可视化图。 为了进一步理解图数据结构及其应用,可以访问给出的博文链接...

    数据结构与算法(Java版本)

    最后,这个Java版本的数据结构与算法教程很可能包含了这些主题的实际代码示例,帮助读者理解并实践所学知识。通过学习和实践,你将能够运用这些工具和技巧来提升你的编程技能,并为解决实际问题打下坚实基础。

    MarkovNetwork:马尔科夫游乐场的网络组件

    5. **Java库支持**:在Java中,可以利用一些库来辅助构建和操作马尔科夫网络,比如OpenCV库提供了图形模型的实现,JGraphT库则可以用来处理图结构。 6. **并行计算优化**:由于马尔科夫网络的计算通常涉及到大量的...

    basic-.rar_图形图象_Java_

    8. **路径规划**:使用算法(如Dijkstra或A*)计算两点间的最短路径,Java库如JGraphT可以辅助实现。 9. **事件处理**:在JavaFX和Swing中,事件监听器允许用户与地图交互,例如点击地图上的特定区域。 10. **地图...

    PolyImage:将照片变成有趣的可视化

    在Java中,我们可以自定义算法,或者使用现有的库如JGraphT,它提供了三角剖分的功能。 2. **多边形生成**:一旦图像被分割,每个区域需要转化为一个多边形。多边形的边可能是直线或曲线,具体取决于算法的选择。...

    entrega1ED:Entrega 1 estructura de datos

    7. **图**:图数据结构用于表示对象之间的复杂关系,Java通常通过自定义类或第三方库如JGraphT来实现。 8. **散列表(哈希表)**:HashMap是Java中最常用的散列表,通过键值对进行存储,提供O(1)的平均查找和插入...

    数据结构

    数据结构是计算机科学中的核心概念,它涉及到如何在内存中有效地组织和管理数据,以便进行高效的数据...在DataStructures-master这个项目中,可能包含了对这些数据结构的实现和示例,可以作为学习和实践的宝贵资源。

    Data-Structures-Series

    在"Data-Structures-Series-main"这个项目中,可能包含对以上数据结构的实现、示例代码和实践应用,这将帮助你更深入地理解和掌握Java中的数据结构。 例如,你可能会遇到如何实现一个简单的栈来模拟括号匹配,或者...

Global site tag (gtag.js) - Google Analytics