目录

  • 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. C++在数字N中找到精确除以N的数字的算法(附完整源码)
  2. Python 中的面向对象没有意义
  3. Xamarin.Forms 5.0 来了
  4. C++主要操作符重载的定义和总结
  5. mysql 5.6.27安装图解_Linux下MySQL 5.6.27 安装教程
  6. php 日期算法,php日期时间计算,转载
  7. 存储管理工具StorageExplorer的基本使用
  8. android button text属性中英文大小写问题
  9. Liunx 常用命令
  10. oracle日期处理完全版
  11. fritzing元件太少_fritzing传感器元件库
  12. 大学论文的研究框架是什么?
  13. Remote Desktop Connection Manager (RDCMan)
  14. 重启tomcat-Tomcat服务器怎么重启?
  15. 如何清空c盘只剩系统_怎么把C盘东西都删除只留系统东西
  16. 在java中定义一个字符串类型的变量str的语句是:( )._JAVA复习题
  17. Linux LED子系统调试与应用 设备树官方文档与 gpio-leds.c 源码详解
  18. win11如何打开热点?
  19. 10min快速回顾C++语法(六)函数专题
  20. 联想笔记本电脑无线网卡无法开启

热门文章

  1. 图像边缘检测(canny检测附完整代码与输出样例)
  2. 普通人开抖音小店挣钱吗?2023最受欢迎副业,有需求的小白看过来
  3. 关于为什么2147483647加1后会变成-2147483648
  4. iterm php,iterm2使用
  5. First Happy Work :)
  6. 【Elasticsearch】Elasticsearch中 aggs (桶)聚合查询和进行二次聚合查询
  7. Camera Tuning 术语
  8. html table水平和垂直滚动条,Ajax: Excel风格的HTML Table输入控件[二]:外部表格与水平垂直滚动条...
  9. tokudb 分形树_转载TokuDB性能测试报告
  10. day12Java-Object