有向图概念基础

  • 什么是有向图
  • 有向图相关术语
  • 邻接矩阵
    • 邻接矩阵的定义
    • 邻接矩阵表示法
      • 无向图的邻接矩阵
      • 有向图的邻接矩阵
      • 有权图(网)的邻接矩阵表示法
    • 邻接矩阵储存法
    • 用邻接矩阵表示法创建无向网

什么是有向图

定义:有向图是一副具有方向性的图,是有一组顶点和一组有方向的边组成的,每条方向的边都连接着一对有序的顶点。
全部由无向边构成图称为无向图

有向图相关术语

出度:有某个顶点指出的边的个数称为该顶点的出度。
入度:指向某个顶点的边的个数称为该顶点的入度。
度:入度+出度,称为该顶点的度。
注意:自环(起点和终点为同一顶点),此时出度算一度,入度也算一度。

如上图所示,顶点A的出度为2,入度为1,度为3

有向边:一条有向边的第一个顶点称为它的头,第二个顶点称为它的尾。将有向边画为由头指向尾的一个箭头。
有向环:一条至少含有一条边,且起点和终点相同的有向路径。
有向路径:由一系列顶点组成,对于其中的每个顶点都存在一条有向边,从它指向序列中的下一个顶点。
注意:一副有向图中两个顶点v和w可能存在以下四种关系:
1:没有边相连;
2:存在从v到w的边v->w;
3:存在从w到v的边w->v;
4:即存在w到v的边,也存在v到w的边,即双向链接;

邻接矩阵

邻接矩阵的定义

设图G=(V,E),其中顶点集V=v1,v2,…,vn,边集 E=e1,e2,…,eε。用aij表示顶点vi与顶点vj之间的边数,可能取值为0,1,2,…,称所得矩阵A=A(G)=(aij)n×n为图G的邻接矩阵。
邻接矩阵可以描述有向图和无向图。
翻译:邻接矩阵是用来表示各个顶点之间连接关系的数组

邻接矩阵表示法

第一步:建立一个顶点表(记录各个顶点信息)和一个邻接矩阵(表示各个顶点之间关系)。
设图A=(V,E)有n个顶点,则顶点表为

第二步:建立邻接矩阵

图的邻接矩阵是一个二位数组A.arcs[n][n],定义为:

A. arcs⁡[i][j]={1,如果 ⟨i,j⟩∈E或者 (i,j)∈E0,否则 \text { A. } \operatorname{arcs}[i][j]= \begin{cases}1, & \text { 如果 }\langle i, j\rangle \in E \text { 或者 }(i, j) \in E \\ 0, & \text { 否则 }\end{cases}  A. arcs[i][j]={1,0,​ 如果 ⟨i,j⟩∈E 或者 (i,j)∈E 否则 ​

无向图的邻接矩阵

无向图的邻接矩阵如图,其中第1行第2列的“1”表示V~1~与V~2~有连接关系。相对的,第2行第1列的“1”表示V~2~与V~1~有连接关系。

分析1:无向图的邻接矩阵是对称的;
分析2:顶点i的度=第i行(列)中1的个数;
注:完全图的邻接矩阵中,对角元素为0,其余1。

有向图的邻接矩阵

有向图的邻接矩阵与无向图略有不同,因为有向图中的边具有方向含义。因此要做出以下定义:

第i行含义:以结点vi为尾的弧(即出度边);
第i列含义:以结点vi为头的弧(即入度边)。

分析1:有向图的邻接矩阵可能是不对称的;
分析2:顶点的出度 = 第 i 行元素之和
顶点的入度 = 第 i 列元素之和
顶点的度 = 第 i 行元素之和 + 第 i 列元素之和

有权图(网)的邻接矩阵表示法

加权后的邻接矩阵定义为:
A. arcs⁡[i][j]={Wij<vi,vj>或 (vi,vj)∈VR∞无边 (弧 )\text { A. } \operatorname{arcs}[\mathrm{i}][\mathrm{j}]=\left\{\begin{array}{cc} \mathrm{W}_{\mathrm{ij}} & <\mathrm{vi}, \mathrm{vj}>\text { 或 }(\mathrm{vi}, \mathrm{vj}) \in \mathrm{VR} \\ \infty & \text { 无边 }(\text { 弧 }) \end{array}\right.  A. arcs[i][j]={Wij​∞​<vi,vj> 或 (vi,vj)∈VR 无边 ( 弧 )​

如上图所示,矩阵中的“1”变为了相应边的权值。而“0”变为了“∞”

邻接矩阵储存法

用两个数组分别存储顶点表和邻接矩阵

#define Maxlnt 32767     //表示极大值,即 ∞
#define MVNum 100        //最大顶点数
typedef char VerTexType; //设顶点的数据类型为字符型
typedef int ArcType;     //假设边的权值类型为整型 typedef struct{VerTexType vexs[MVNum];      //顶点表 ArcType arcs[MVNum][MVNum];  //邻接矩阵int vexnum,arcnum;           //图的当前点数和边数
}AMGraph; //Adjacency Matrix Graph 

用邻接矩阵表示法创建无向网

【算法思想】
(1)输入总顶点数和总边数。
(2)依次输入点的信息存入顶点表中。
(3)初始化邻接矩阵,使每个权值初始化为极大值。
(4)构造邻接矩阵。

本文参考以下博客:
有向图和无向图,SuperiorPluto.
【图结构专题】有向图,惜暮.
邻接矩阵,diviner_s.

图结构算法学习(一)——有向图相关推荐

  1. 数据结构基础:图结构的学习笔记

    1.图的定义 图是比树更加复杂的数据结构,在图的结构当中,任意两个节点之间都有可能有直接关系,所以图中一个节点的前驱和后继的数目是没有限制的. 2.图的用途 用于描述各种复杂的数据对象,在自然科学.社 ...

  2. java流类图结构_java学习之IO流(学习之旅,一)

    个人在学习IO流的时候看到如下所示java 流类图结构的时候,我的感想是,这么多··处于蒙的状态. Java流类图结构 这么多,没有分类不好学,那我们就慢慢一口一口的吃,这样每天学习一点就好了,其实很 ...

  3. C++ | 数据结构 | 图结构的讲解与模拟实现 | DFS与BFS的实现

    文章目录 前言 常见概念总结 图的模拟实现 邻接矩阵和邻接表的优劣 图的模拟实现(邻接表) 广度优先遍历(BFS) 深度优先遍历(DFS) hpp代码展示 前言 在聊图的结构之前,我们可以先从熟悉的地 ...

  4. ESL第十七章 无向图模型 学习/推断/成对马尔可夫独立/全局马尔可夫性、协方差图/高斯图/修改回归算法/图结构估计/图lasso、【受限】玻尔兹曼机/泊松对数线性建模/迭代比例过滤/对比散度

    目录 17.1 导言 17.2 马尔可夫图及其性质 17.3 连续变量的无向图模型 17.3.1 图结构已知的参数估计 17.3.2 估计图结构 17.4 离散变量的无向图模型 17.4.1 图结构已 ...

  5. 数据结构与算法学习④(哈夫曼树 图 分治回溯和递归)

    数据结构与算法学习④(哈夫曼树 图 回溯和递归 数据结构与算法学习④ 1.哈夫曼树 1.1.相关概念 1.2.哈夫曼树的构建 1.3.哈夫曼编码 1.4.面试题 2.图 2.1.图的相关概念 2.2. ...

  6. 数据结构与算法学习笔记——图 C++实现

    数据结构与算法学习笔记--图 C++实现 1 概念 2 图的表示方法 3 算法 3.1 拓扑排序 3.2 图的搜索算法 3.2.1 广度优先搜索(BFS) 3.2.2 深度优先搜索(DFS) 3.3 ...

  7. 【数据结构与算法】详解什么是图结构,并用代码手动实现一个图结构

    本系列文章[数据结构与算法]所有完整代码已上传 github,想要完整代码的小伙伴可以直接去那获取,可以的话欢迎点个Star哦~下面放上跳转链接 https://github.com/Lpyexplo ...

  8. 一步一步写算法(之图结构)

    原文:一步一步写算法(之图结构) [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 图是数据结构里面的重要一章.通过图,我们可以判断两个点之间是 ...

  9. 分别用邻接矩阵和邻接表实现图的深度优先遍历和广度优先遍历_数据结构与算法学习笔记:图...

    图: 图结构区别于线性结构和树型结构,区别可见下图 逻辑上的图(graph)结构由顶点(vertex)和边(edge)组成. 一个图结构G包含顶点集合V和边集合E,任何两个顶点之间可以有一个边表示两者 ...

最新文章

  1. 滑坡的剖面图怎么用计算机绘制,cad怎么画滑坡剖面
  2. react中使用scss_我如何将CSS模块和SCSS集成到我的React应用程序中
  3. Excel,此文件中的某些文本格式可能已经更改,因为它已经超出最多允许的字体数。...
  4. GridView跨行合并单元格
  5. 职场宝典:63种能力让你职场步步高升
  6. 防止cpu 一直被占用 sleep(0) 和 yield
  7. 最近有粉丝向我请教Java泛型,于是重温了一下,希望学弟面试顺利
  8. P3911 最小公倍数之和
  9. 华为轮值董事长徐直军:5G不是原子弹 不伤害人
  10. git常用命令与常见错误
  11. 常见Linux命令(非文件操作)
  12. linux 批量更改三四级目录 扩展名,Linux批量更改文件后缀名
  13. source命令用法详解
  14. 国美易卡MVCC读取,国美易卡DB_ROW_ID唯一值
  15. 酷6 期待“化茧成蝶”
  16. android app签名方法
  17. Python 如何实时绘制数据
  18. CSS line-height属性
  19. 我的世界电脑版怎么下载java_我的世界端游java版怎么下载
  20. 基于 Apache Druid 的实时分析平台在爱奇艺的实践

热门文章

  1. 小游戏——金庸奇侠传(JAVA,对面向对象的进一步了解)
  2. 关于PacketShaper和Netflow Tracker软件的同步
  3. 中国程序员在美遭抢劫电脑遇害,数百人悼念
  4. 膝盖中了一箭之康复篇9-12周
  5. TM1648A驱动程序
  6. 计算机图形绘制三棱柱源代码,基于MFC用OpenGL画得一个三棱柱
  7. 哪种灯对眼睛视力保护最好?推荐国AA级照度的护眼台灯
  8. 糖果机器人_0002
  9. 如何删除Cookie
  10. 什么是ajax跨域问题,如何解决ajax跨域问题