数据结构——第四章图:01图相关定义

1.图的定义:图是一种网状数据结构,形式化定义如下:图Graph = (V, R),V = {x | x ∈ DataObject},R = {VR},VR = {<x, y> | P(x, y) ∧ (x, y ∈ V)}。集合DataObject中的所有元素具有相同的特性。V中的数据元素通常为顶点(vertex),VR是两个顶点之间关系的集合,P(x, y)表示x和y之间有特定的关系属性P。

(1)若<x, y> ∈ VR,则<x, y>表示从顶点x到顶点y的一条弧(arc),并称x为弧尾(tail)或起始点,称y为弧头(head)或终端点,此时图中的边是有方向的,称这样的图为有向图。

(2)若<x, y> ∈ VR,且有<y, x> ∈ VR,即VR是对称关系,这时以无序对(x, y)来代替两个有序对,表示x和y之间的一条边(edge),此时的图称为无向图。如下图,左图为无向图,右图为有向图:

          

ADT Graph

{

  数据对象V:V是具有相同特性的数据元素的集合,称为顶点集。

  数据关系R:R = {VR},VR = {<x, y> | P(x, y) ∧ (x, y ∈ V)}

  基本操作P:

  ①CreateGraph(&G, V, VR)

     初始条件:V是图的顶点集,VR是图中弧的集合。

     操作结果:按V和VR的定义构造图G。

  ②DestroyGraph(&G)

     初始条件:图G存在。

     操作结果:销毁图G。

  ③LocateVex(G, u)

     初始条件:图G存在,u和G中顶点有相同特征。

     操作结果:若G中存在顶点u,则返回该顶点在图中位置;否则返回其它信息。

  ④GetVex(G, v)

     初始条件:图G存在,v是G中某个顶点。

     操作结果:返回v的值。

  ⑤PutVex(&G, v, value)

     初始条件:图G存在,v是G中某个顶点。

     操作结果:对v赋值value。

  ⑥InsertVex(&G, v)

     初始条件:图G存在,v和图中顶点有相同特征。

     操作结果:在图G中添加新顶点v。

  ⑦DeleteVex(&G, v)

     初始条件:图G存在,v是G中某个顶点。

     操作结果:删除G中顶点v及其相关的弧。

  ⑧InsertAcr(&G, v, w)

     初始条件:图G存在,v和w是G中两个顶点。

     操作结果:在G中增添弧<v, w>,若G是无向的,则还增添对称弧<w, v>。

  ⑨DeleteArc(&G, v, w)

     初始条件:图G存在,v和w是G中两个顶点。

     操纵结果:在G中删除弧<v, w>,若G是无向的,则还删除对称弧<w, v>。

  ⑩DFSTraverse(G, visit())

     初始条件:图G存在,v是G中某个顶点,visit是顶点的应用函数。

     操作结果:深度优先遍历图个G,并对每个顶点调用函数visit一次。一旦visit失败,则操作失败。

  ?BFSTraverse(G, visit())

     初始条件:图G存在,visit是顶点的应用函数。

     操作结果:广度优先遍历图G,并对每个顶点调用函数visit一次,一旦visit失败,则操作失败。

}

2.完全图:设n表示图中顶点个数,用e表示图中边或弧的数目,且不考虑图中每个顶点到其自身的边或弧。

(1)无向完全图:对于无向图而言,其边数e的取值范围是0~n(n-1)/2。称有n(n-1)/2条边(即图中每个顶点和其余n-1个顶点都有边相连)的无向图为无向完全图。

(2)有向完全图:对于有向图而言,其边数e的取值范围是0~n(n-1)。称有n(n-1)条弧(即图中每个顶点和其余n-1个顶点都有弧相连)的有向图为有向完全图。

3.稀疏图和稠密图:对于有很少条边的图(e < nlogn)称为稀疏图,反之称为稠密图。

4.子图:设图G = (V, {VR})和图G‘ = (V‘, {VR‘}),且V‘ ?V,VR‘ ? VR,则称G‘为G的子图。

5.邻接点:对于无向图G = (V, {E}),如果边(v, v‘) ∈ E,则称顶点v,v‘互为邻接点,即v,v‘相邻接。边(v, v‘)依附于顶点v和v‘,或者说边(v, v‘)与顶点v和v‘相关联。对于有向图G = (V, {A}),如果弧<v, v‘> ∈ A,则称顶点v邻接到顶点v‘,顶点v‘邻接自顶点v,或者说弧<v, v‘>与顶点v和v‘相关联。

6.度、入度和出度:对于无向图而言,顶点v的度是指和v相关联的边的数目,记作(v)。在有向图中,顶点v的度有出度和入度两部分,其中以顶点v为弧头的弧的数目称为该顶点的入度,记作ID(v),以顶点v为弧尾的弧的数目称为该顶点的出度,记作OD(v),则顶点v的度为TD(v) = ID(v) + OD(v)。

7.权与网:在一个图中,每条边上可以标上具有某种含义的数值,此数值称为该边的权,通常权为非负实数,可以表示从一个顶点到另一个顶点的距离或耗费等信息。边上带有权的图称为带权图,也常称作网。

8.路径与回路:无向图G = (V, {E})中从顶点v到v‘的路径是一个顶点序列(v = vi0, vi1, vi2, ... ,vin = v‘),其中(vij-1,vij) ∈ E,1 ≤ j ≤ n。如果图G是有向图,则路径也是有向的,顶点序列应满足<vij-1,vij> ∈ E,1 ≤ j ≤ n。路径的长度是指路径上经过的弧或边的数目。在一个路径中,若其第一个顶点和最后一个顶点是相同的,即v = v‘,则称该路径为回路或环。若表示路径的顶点序列中的顶点各不相同,则称这样的路径为简单路径。除了第一个和最后一个顶点外,其余各顶点均不重复出现的回路为简单回路。

9.连通图:在无向图G = (V, {E})中,若从vi到vj有路径相通,则称顶点vi与vj是连通的。如果对于图中的任意两个顶点vi、vj ∈ V,vi,vj都是连通的,则称该无向图G为连通图。在有向图G = (V, {A})中,若对于每对顶点vi,v∈ V且v≠ vj,从vi到vj和vj到vi都有路径,则称该有向图为强连通图。

10.连通分量:无向图中的极大连通子图称为该无向图的连通分量。任何连通图的连通分量只有一个,即其自身。非连通的无向图有多个连通分量。有向图的极大强连通子图称为G的强连通分量。强连通图只有一个强连通分量,即其自身。非强连通的有向图有多个强连通分量。

11.生成树:一个连通图的生成树是一个极小连通子图,它含有图中全部顶点,但是只有足以构成一棵树的n-1条边。如果在一棵生成树上添加一条边,必定构成一个环。如果一个图有n个顶点和小于n-1条边,则是非连通图,如果多于n-1条边则一定有环。

原文地址:https://www.cnblogs.com/hou36/p/9910357.html

时间: 2024-10-07 23:34:43

数据结构——第四章图:01图相关定义的相关文章

数据结构第四章总结

数据结构第四章学习的是串,数组和广义表(广义表课程中没讲,问题不大) 串的定义其实在c++学习中就有所接触,所以这里不详说,  重点说的是两个串模式匹配算法 1.BF算法 BF算法的思想就是将目标串S的第一个字符与模式串T的第一个字符进行匹配,若相等,则继续比较S的第二个字符和 T的第二个字符: 若不相等,则比较S的第二个字符和T的第一个字符,依次比较下去,直到得出最后的匹配结果.BF算法是一种蛮力算法. 2.KMP算法 KMP算法的关键是利用匹配失败后的信息,尽量减少模式串与主串的匹配次数以达

数据结构第四章小结

任选本章一道题目,谈谈你解决该题的心得体会.同时谈谈你对上次制定目标的完成情况, 以及接下来的目标. 一.第四章主要学习了串,我觉得最重要的两个内容,一个是AI核心代码,一个是稀疏矩阵的十字链表压缩存储:AI核心代码呢,老师在课堂上讲了一部分,自己也接受了挺多的,当天我就趁热打铁在通识课上回味了一下,老师有留给我们自己完成can you 的那一部分内容,之前有一部分是you变成I,我参照着之前的自己写了一遍,但是一开始出现了错误,又重新写了好几遍,但是总是会出现warning,可能是溢出的问题,

数据结构第四章学习小结

第四章主要是串和数组的学习,之前对串和数组的应用仅限于对其单独处理,本章学习着重于对具体题目的实际操作,实践了串的模式匹配算法,对其有了更深入的了解,数组的应用拓展到了稀疏矩阵的存储的实现. 一.串 串的模式匹配 BF算法 首先未匹配到串尾时,将两个字符串一一匹配,可用C++自带的length()函数实现 while(i<=S.length()&&j<=T.length()) 接下来就是匹配的过程 if(S[i]==T[j]){ i++;j++; }//若匹配则继续比较下一位

第四章:活动图

活动图明确先做什么,后坐什么,什么条件下做什么. 活动图也可以不面向对象,但流程图一定面向过程. 一个活动图一定有只有一个初始节点.终点为1-n. 如果有多个终点那么可以有描述. 无触发转换也称为隐式转换. 分叉汇合必须一一配对. 由对象指向活动,表明对象是活动的输入. 活动指向对象,表明活动产生对象. 活动图可以表明对象流,流程图不可以. 原文地址:https://www.cnblogs.com/invisible2/p/8986646.html

jQuery_第四章_思维图

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ ---------------------------

C语言数据结构——第四章 串

四.串 4.1-串的基本概念 串的定义 串是由数字.字母或其他字符组成的有限序列,一般记为 StringName = “a[0]a[1]a[2]···a[i]···a[n-1]”(n>0,0<=i<=n-1) 其中StringName是串名,双引号内的序列是该串的值,n为串的长度,i为某一字符在该串中的下标 串的常用术语 串的长度:串中包含字符个数即为串的长度 空串:串中不包含任何字符时被称为空串,此时串的长度为0 空格串:由一个或多个空格组成的串被称为空格串,它的长度是串中空格的个数

JAVA-初步认识-第四章-函数-细节-错误格式\定义思想错误

一. 从函数的功能三来看,(无输入,无输出),当很多次输出时,我们将其功能函数化,可以提高代码的复用性. 当一句代码重复使用两次以上时,就要考虑提高复用性. 二. 函数的好处 重点:封装+复用 函数的级别是同一级别的,在类中地位相同. 注意:返回调用时重点,没看懂 封装的时候,功能个数有限制.加法是个功能,输出也是个功能.应该封装一个功能. 这里为什么会有void关键字,这不是有返回值么?→错了,这不是返回值,这是加法+输出的功能化函数.核心在输出上,所以用void的来作为add的关键字,而不是

JAVA-初步认识-第十四章-多线程-停止线程方式-定义标记

一. 线程既然开启了,运行了,冻结又恢复运行了,那什么时候消亡呢? 怎么来停止线程呢?不能一直在运行. 线程怎么停,线程自己最清楚.在Thread类中,提供了stop方法, 本来线程持有一个锁,只要stop,它就什么都在放,这是强制操作,无论出于什么状态,强制将其搞定.本来wait,这那儿的,stop一下子就没了. stop方法做的不是状态切换了,而是消失. 线程停止,其实只有一种,就是run方法结束. 线程一旦没有自己运行的代码了,任务没有了,线程自动就结束了.可是线程的任务怎么能没有呢? 标

第四章、队列

第四章.队列 一.定义: 与栈相反,队列是一种先进先出的结构.只允许在表的一端进行插入,在另一端进行删除. 二.数据结构: 1 typedef struct 原文地址:https://www.cnblogs.com/yangsongwei/p/8747026.html