目录

  • 1 定义
  • 2 相关术语
  • 3 Java实现

1 定义

在实际生活中,很多图都具有方向性,比如互联网,从A页面通过链接跳转到B页面,A和B的连接就有方向A->B,就需要使用有向图来表达。


定义:有向图是具有方向性的图,由一组顶点和一组有方向的边组成,每条方向的边都连着一对有序的顶点。

2 相关术语

  1. 出度:由某个顶点指出的边的个数;
  2. 入度:指向某个顶点的边的个数;
  3. 有向路径:由一系列顶点组成,其中的每个顶点都存在一条有向边,从它指向序列中的下一个顶点;
  4. 有向环:至少含有一条边,且起点和终点相同的有向路径;


两个顶点v和w可能存在的4种关系:

  1. 没有边相连;
  2. 存在从v到w的边v->w;
  3. 存在从w到v的边w->v;
  4. 既存在v->w,也存在w->v,即双向连接;

3 Java实现

public class Digraph {//顶点数目private final int V;//边的数目private int E;//邻接表private Deque<Integer>[] adj;public Digraph(int V){//初始化顶点数量this.V = V;//初始化边的数量this.E = 0;//初始化邻接表this.adj = new Deque[V];for (int i = 0; i < adj.length; i++) {adj[i] = new LinkedList<>();}}//获取顶点数目public int V(){return V;}//获取边的数目public int E(){return E;}//向有向图中添加一条边 v->wpublic void addEdge(int v, int w) {//只需要让顶点w出现在顶点v的邻接表中,因为边是有方向的,最终,顶点v的邻接表中存储的相邻顶点的含义是: v->其他顶点adj[v].offer(w);E++;}//获取由v指出的边所连接的所有顶点public Deque<Integer> adj(int v){return adj[v];}//该图的反向图private Digraph reverse(){//创建有向图对象Digraph r = new Digraph(V);for (int v=0; v<V; v++){//获取由该顶点v指出的所有边for (Integer w : adj[v]) {//原图中表示的是由顶点v->w的边r.addEdge(w,v);//w->v}}return r;}
}

有向图的定义及Java实现相关推荐

  1. 拓扑排序之java实现_有向图和拓扑排序Java实现

    package practice; import java.util.ArrayDeque; import java.util.Iterator; import java.util.Stack; pu ...

  2. 关于spring mybateis 定义resultType=java.util.HashMap

    关于spring mybateis 定义resultType="java.util.HashMap" List<HashMap<String, Object>&g ...

  3. Java 编译器代码定义的 Java语言的类型 Types

    Java 编译器代码定义的 Java语言的类型 Types /** Copyright (c) 2005, 2013, Oracle and/or its affiliates. All rights ...

  4. java中构造方法只能有一个_对Java中类的构造方法描述正确的是()A.如果在类中没有定义,Java就提供一个默认的构造方法B.只能...

    对Java中类的构造方法描述正确的是()A.如果在类中没有定义,Java就提供一个默认的构造方法B.只能 更多相关问题 猛虎噬人卣是_______时期的陶塑代表作品. 静态网页是指网页的内容是固定的, ...

  5. java数组定义便利,java数组的定义(菜鸟教程)

    数组 数组有两种定义形式. 数组的定义: 这一种形式使用的频率高,推荐使用. int[] ints={1,2,3}; 第二种形式(容易使人混淆因为在开发中可能把这个看成一个数组类型而不是变量名) in ...

  6. 【数据结构与算法】广义表的储存结构和结点定义的Java实现

    广义表的存储结构 广义表中元素类型不统一,在Java语言的环境下难以用顺序结构存储.链式结构则相对灵活,可以解决广义表的递归和共享问题,所以常用链式存储结构来对广义表进行存储. 如果广义表不空,则可以 ...

  7. java中方法未定义_java - Java SE中的未定义方法错误 - 堆栈内存溢出

    我为该问题写了一个代码http://www.spoj.com/problems/PRIME1/ ,该代码的作用是将输入以字符串形式输入,然后将split()拆分为两个整数,并存储在该数组中.然后返回到 ...

  8. java命名规范怎么定义?java命名规则

    在java刚刚入门时,我们可能首先就要了解java中一些常规的命名规范了,这也是必要的,否则当你以数字开头作为类名,都不知道为啥会报错.我们一起来看看,java命名规范是怎么定义呢?java命名规则和 ...

  9. HTTP content-type 把它定义为java可读取的变量数组

    日期:2022-02-12 星期六 1858 by:enAn 把内容转为java的变量-第一版本 参考地址:https://www.runoob.com/http/http-content-type. ...

最新文章

  1. Android log 引发的血案
  2. BZOJ4569: [Scoi2016]萌萌哒
  3. jdk 5 到 jdk 10各个版本的新特性
  4. [c#基础]使用抽象工厂实现三层
  5. memcached完全剖析
  6. 安装electron-react-boilerplate遇到的问题
  7. 使用Python编写数独游戏自动出题程序
  8. 运动目标跟踪(八)--时空上下文(STC)跟踪原理
  9. Vuforia的ARcamera通过识别人工标识码出现虚拟物体后在其相机视野中不显示人工标识码
  10. Object对象转JSON字符串
  11. 18个使用 jQuery 制作的创意网站欣赏
  12. 《知识产权知识产权信用管理规定》解读问答
  13. python处理excel 隐藏sheet
  14. JavaScript(订单的增删改)
  15. Oracle命名规范
  16. ubuntu16.04安装ROS Kinetic步骤及安装出现的问题解决
  17. RobotBuilder机器人运动学快速仿真软件
  18. 2022年考研数据结构_8 排序
  19. python TimedRotatingFileHandler 配置参数 (转)
  20. 江苏省计算机二级vb知识点,2020年全国计算机二级VB复习知识点:数据类型

热门文章

  1. COM编程之三 QueryInterface
  2. 阿里研发:核心系统--中间件--阿里云--yunOS介绍
  3. 移动金融管理系统设计与开发实训(课程设计报告)——基于Android+Django的银行系统部分功能设计与实现
  4. 2012中国知识管理论坛成功举办,演讲内容公开了
  5. Spring IoC Container 原理解析
  6. 抢先玩乐Iris发布2.1版 Android版Siri(下载地址)
  7. 8年美团经验之谈 —— 自动化测试成长之路
  8. Django 图表制作(By Highcharts)
  9. android 自动对焦pk,Android拍照机皇大PK i9100对决LT18i
  10. mybatis -- 嵌套查询