数据结构-图(1)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

V4
非连通图
V3
强连通图
V4
V3
V4
非强连通图
第7章 图 生成树: 连通图的生成树是一个极小连通子图,它含有图 中全部顶点,但只有足以构成一棵树的n-1条边。 e<n-1 → 非连通图 e>n-1 → 一定有回路 e=n-1 → 不一定都是图的生成树
第7章 图 例1:G是非连通无向图,共28条边,至少有多少个顶点?(注 意审题)

路径的长度: 路径上经过的弧或边的数目; 回路或环: 第一个顶点和最后一个顶点相同时; 简单路径:表示路径的顶点序列中的顶点各不相同; 简单回路 :除了第一个和最后一个顶点外,其余各顶点均不 重复出现的回路。




例4:在图a中,V0,V1,V2,V3 是简单路径; V0,V1,V2,V4,V1不是简
第7章 图
邻接矩阵的特点如下:

图的邻接矩阵表示是惟一的。 无向图的邻接矩阵一定是一个对称矩阵。存储可采用压缩存储。 弱邻接矩阵是一个稀疏矩阵,可以采用三元组表的方法存储邻接矩阵。



计算度容易:对于无向图, 邻接矩阵的第i 行(或第i列) 非零元素( 或 非∞元素)的个数正好是第i个顶点vi的度。对于有向图,邻接矩阵的 第i行(或第i列)非零元素(或非∞元素)的个数正好是第i个顶点vi的 出度(或入度)。
单路径;在图b中, V0,V2,V3,V0是简单回路,也是一个环。
第7章 图
连通图: 无向图中任意两个顶点都连通 连通分量:无向图中的极大连通子图。 强连通图: 有向图每对顶点之间都存在路径 强连通分量: 有向图的极大强连通子图。
V0 V1 V0 V2 V4
连通图
V1
V0
V1
V0
V1
V2
V3 V3
构造 Huffman树算法
1) 以权值分别为W1,W2...Wn的n各结点,构成n棵
二叉树T1,T2,...Tn并组成森林F={T1,T2,...Tn}, 其中每棵二叉树 Ti仅有一个权值为 Wi的根结点; 2) 在F中选取两棵根结点权值最小的树作为左右子树构造 一棵新二叉树,并且置新二叉树根结点权值为左右子树
第7章 图
第7章 图
第7章 图
邻接矩阵表示法类型描述 :
#define MAX_VERTEX_NUM 20 #define INFINITY INT_MAX //最多顶点个数 //表示极大值∞
typedef enum{DG, DN, UDG, UDN} GraphKind; // 有向图,有向网,无向图,无向网 typedef struct ArcCell{// 弧的定义 VRType adj; //VRType是顶点关系类型。对无权图,用1或0表示是否相邻;
Vi Vj
弧头
第7章 图
有向图、无向图示例
第7章 图
本章不予讨论的图
第7章 图
Internet 网分布图
脑网络图 蛋白质相互作用图
第7章 图
2. 基本术语
完全图(边达到最大)、稀疏图与稠密图 n:图中顶点的个数; e:图中边或弧的数目。 无向图其边数e的取值范围是0~n(n-1)/2。 无向完全图:有n(n-1)/2条边的无向图。 有向图其边数e的取值范围是0~n(n-1)。
//对带权图,则为权值
InfoType *info; //该弧的相关信息指针,一般不需要 } ArcCell, AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; //每个元素为ArcCell结构的二维数组(邻接矩阵),表示了边的信息 typedef struct{// 图的定义 VertexType vexs[MAX_VERTEX_NUM]; //顶点向量 AdjMatrix arcs; //邻接矩阵 int vexnum, arcnum; //图的顶点数和弧数 GraphKind kind; //图的种类标志,共四种 } MGraph;
以顶点v为尾的弧的数目,称为该顶点的出度。一个顶点的 入度与出度的和为该顶点的度。

一般地,若图G中有n个顶点,e条边或弧,则图中顶点的 度与边的关系如下: Why?
e
TD(v )
i 1 i
n
2
一个边被两个顶点分, 对于度来说有两次贡献
第7章 图
权与网
在实际应用中,有时图的边或弧上往往与具有一定意义的 数有关,即每一条边都有与它相关的数,称为权,这些权可 以表示从一个顶点到另一个顶点的距离或耗费等信息。我们 将这种带权的图叫做赋权图或网。
第7章 图
邻接表的特点如下:

邻接表表示不惟一。这是因为在每个顶点对应的单链表中 , 各 边结点的链接次序可以是任意的 , 取决于建立邻接表的算法以 及边的输入次序。 对于有n个顶点和e条边的无向图,其邻接表有n个头结点和2e个 表结点。显然 , 在总的边数小于 n(n-1)/2 的情况下 , 邻接表比邻 接矩阵要节省空间。 对于无向图,邻接表的顶点vi对应的第i个链表的表结点数目正 好是顶点vi的度。 对于有向图,邻接表的顶点vi对应的第i个链表的表结点数目仅 仅是vi的出度(求顶点的出度易,求入度难) 。其入度为邻接表 中所有adjvex域值为i的表结点数目。(逆邻接表)
data firstarc 表结点 adjvex nextarc info


data存储顶点vi的名称或其他信息; firstarc指向链表中第一 个结点。 adjvex指示与顶点vi邻接的点在图中的位置;nextarc指示下 一条边或弧的结点; info存储与边或弧相关的信息,如权值等。
第7章 图
局限性:用邻接矩阵方法存储图,容易确定图中任意两个顶点之间是 否有边相连。但是, 要确定图中有多少条边 , 则必须按行、按列对每 个元素进行检测,所花费的时间代价很大。

第7章 图 2.邻接表存储方法:图的链式存储结构
在邻接表中,对图中每个顶点建立一个单链表,第i个单链 表中的结点表示依附于顶点 vi 的边 (对有向图是以顶点 vi 为尾 的弧)。每个单链表上附设一个表头结点。表结点和表头结点 的结构如下: 表头结点
--最短路径 (无向图)
第7章 图
7.1 图的定义和术语
1. 图的定义
图(Graph)G由两个集合V(Vertex)和E(Edge)组成, 记为 G=(V,{E}),其中V是顶点的有限集合, 记为V(G), E是连接V中两个 不同顶点(顶点对)的边的有限集合, 记为E(G)。 在图G中,如果代表边的顶点对是无序的,则称G为无向图,无 向图中代表边的无序顶点对,通常用圆括号括起来,用以表示一 条无向边。 如:(vi,vj) Vj Vi 如果表示边的顶点对是有序的,则称G为有向图,在有向图中 代表边的顶点对,通常用尖括号括起来 (称为弧)。如: <vi,vj > 弧尾
答案:9个顶点
例2:有n个顶点的有向强连通图最多需要多少条边?最少需要 多少条边? 答案:有n个顶点的有向强连通图最多有n(n-1)条边(构成 一个有向完全图的情况);最少有n条边(n个顶点依次首尾相接 构成一个环的情况)。
第7章 图
7.2 图的存储结构
1. 邻接矩阵表示法(数组表示法)
图 G 是一个具有 n 个顶点的无权图, G 的邻接矩阵是具有如下
பைடு நூலகம்



第7章 图
图G1的逆邻接表表示法
3. 十字链表 (课后自学)
4. 邻接多重表 (课后自学)
第7章 图
7.3 图 的 遍 历

图遍历的概念:从给定图中任意指定的顶点(称为初始点)出发,按照某种 搜索方法沿着图的边访问图中的所有顶点,使每个顶点仅被访问一次,这 个过程称为图的遍历。

对于图遍历,需注意以下两点: 如果给定图是连通的无向图或者是强连通的有向图 , 则遍历过程 一次就能完成 ,并可按访问的先后顺序得到由该图所有顶点组成 的一个序列。 为避免同一顶点被访问多次 , 设一个辅助数组 visited[0..n-1], 它的初始值置为0,一旦访问了顶点vi,便置visited[i]为1或者为 被访问时的次序号 根据搜索方法的不同,图的遍历方法有两种:
带权无向图的例子
第7章 图
路径与回路
V0 V2
V1
V0
V1
V3
(a)
V4
V2
(b)
V3
无 向 图 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。
性质的n×n矩阵A:
1, 若(vi , v j )或 vi , v j V A[i, j ] 0, 其它
若图G是一个有n个顶点的网,则它的邻接矩阵是具有如下性 质的n×n矩阵A:
wij , 若(vi , v j )或 vi , v j V A[i, j ] , 其它
双亲只管长子 长子连接兄弟
指向左孩子
指向右兄弟
第7章 图
上堂课内容回顾
根结点肯定没有右孩子!
树和二叉树之间的转换: 方法:加线—抹线—旋转
兄弟相连 长兄为父
孩子靠左
a b
a
b
c
i
d e
c i
d
e f g f g h h
第7章 图
上堂课内容回顾
二叉树还原为树 要点:把所有右孩子变为兄弟!
a b d e c i d e f h g h b a c i
有向完全图:有n(n-1)条边的有向图。
稀疏图:对于有很少条边或弧的图 (e<nlogn) ,
反之称为稠密图。
第7章 图
1
子图 有两个图G=(V, {E})和图G’=(V’, {E’}),
2
3 4 1
0
(a)
若V’ V且E’E, 则称图G’为G的子图。
邻接点 :边的两个顶点对 (vi,vj) 和 <vi,vj >
f g
第7章 图
上堂课内容回顾
森林转换为二叉树:将森林中的每棵树转换成相应的二叉树,
形成若干个二叉树的森林;第一棵二叉树不动,从第二棵二
叉树开始,依次把后一棵二叉树的根结点作为前一棵二叉树 根结点的右孩子, 当所有二叉树连在一起后,所得到的二叉 树就是由森林转换得到的二叉树。 二叉树还原为森林:将二叉树中根结点与其右孩子连线,及 沿右分支搜索到的所有右孩子间连线全部抹掉,使之变成一组 孤立的二叉树;将孤立的二叉树依次还原成树
第7章 图
邻接表存储结构的类型定义: typedef struct ArcNode{//表结点结构类型 int adjvex; //该弧(边)的终点位置 struct ArcNode *nextarc; //指向下一条弧的指针 InfoType info; //该弧的相关信息,如权重 } ArcNode; typedef struct Vnode {//头结点的类型 Vertex data; //顶点信息 ArcNode *firstarc; //指向第一条弧 } VNode, AdjList[MAX_VERTEX_NUM]; typedef struct {//邻接表 AdjList vertices; int vexnum, arcnum; //图中顶点数n和边数e int kind; //图的类型 } ALGraph;

2
3 4 1
0
(b)
无向图:vi和vj互为邻接点; 有向图:vi和vj互为邻接点,弧顶(vj)是 弧尾(vi)的出边邻接点,弧尾(vi)是弧顶 (vj)的是的入边邻接点;
2

3 4
0
(c)
第7章 图 顶点的度、入度和出度

在无向图中,顶点所具有的边的数目称为该顶点的度。

在有向图中 , 以顶点 v 为头的弧的数目 , 称为该顶点的入度。
第7章 图
第七章 图
电子科技大学
第7章 图
上堂课内容回顾
树的存储结构:

双亲表示法 孩子表示法 孩子兄弟表示法
思路:用二叉链表来表示树,但链表中的两个指针域含义不同。 左指针指向该结点的第一个孩子; 右指针指向该结点的下一个兄弟结点。
firstChild
data
nextSibling
上根结点的权值之和;
3) 从F中删除这两棵二叉树,同时将新二叉树加入到F中; 4) 重复2)-3)步直到F中只含一棵二叉树为止,这棵二叉树 就是Huffman 树。
第7章 图
第 7章 图
7.1 图的定义与基本术语
7.2 图的存储结构
7.3 图的遍历
7.4 图的应用
--最小生成树 (无向图)
--拓扑排序 (有向图,简介)
第7章 图
上堂课内容回顾
树的遍历: 先根遍历—等同于转换的二叉树进行先序遍历 后根遍历---等同于转换的二叉树进行中序遍历
森林的遍历: 先序遍历—等同于转换的二叉树进行先序遍历 中序遍历—等同于转换的二叉树进行中序遍历
第7章 图
上堂课内容回顾
哈夫曼树(Huffman)树是一类带权路径长度(WPL)最短的树
相关文档
最新文档