数据结构课件第七章.ppt
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_1.gif)
![资源得分’ title=](/images/score_05.gif)
《数据结构课件第七章.ppt》由会员分享,可在线阅读,更多相关《数据结构课件第七章.ppt(100页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、7.1 抽象数据类型图的定义抽象数据类型图的定义7.2 图的存储表示图的存储表示7.3 图的遍历图的遍历7.4 最小生成树最小生成树7.5 两点之间的最短路径问题两点之间的最短路径问题7.6 拓扑排序拓扑排序7.7 关键路径关键路径 图图是由一个是由一个顶点集顶点集 V 和一个和一个弧集弧集 R构成构成的数据结构。的数据结构。Graph=(V,R)其中,其中,R|v,wV 且且 P(v,w)表示从表示从 v 到到 w 的一条弧,并称的一条弧,并称 v 为为弧头,弧头,w 为弧尾。为弧尾。图的结构定义图的结构定义:VW 由于“弧”是有方向的,因此称由顶点集和弧集构成的图为有向图有向图。AB E
2、C D例如例如:G1=(V1,VR1)其中V1=A,B,C,D,EVR1=,若若 VR 必有必有 VR,则称则称 (v,w)为顶点为顶点v 和顶点和顶点 w 之间存在一条之间存在一条边边。B CA D F E由顶点集和边由顶点集和边集构成的图称集构成的图称作作无向图无向图。例如例如:G2=(V2,VR2)V2=A,B,C,D,E,FVR2=(A,B),(A,E),(B,E),(C,D),(D,F),(B,F),(C,F)名词和术语名词和术语网、子图网、子图 完全图完全图、稀疏图、稠密图稀疏图、稠密图邻接点、度、入度、出度邻接点、度、入度、出度路径、路径长度、简单路径路径、路径长度、简单路径、简
3、单回路简单回路连通图、连通分量、连通图、连通分量、强连通图、强连通分量强连通图、强连通分量生成树、生成森林生成树、生成森林ABECFAEABBC设图设图G=(V,VR)和和图图 G=(V,VR),且且 VV,VRVR,则称则称 G 为为 G 的的子子图图。1597211132 弧或边带权的图弧或边带权的图分别称作分别称作有向网有向网或或无向网无向网。假设图中有 n 个顶点,e 条边,则 含有 e=n(n-1)/2 条边的无向图称作完全图完全图;含有 e=n(n-1)条弧的有向图称作 有向完全图有向完全图;若边或弧的个数 enlogn,则称作稀疏图稀疏图,否则称作稠密图稠密图。假若顶点假若顶点v
4、 和顶点和顶点w 之间存在一条边,之间存在一条边,则称顶点则称顶点v 和和w 互为互为邻接点邻接点,ACDFE例如例如:ID(B)=3ID(A)=2 边边(v,w)和顶点和顶点v 和和w 相相关联关联。和顶点和顶点v 关联的边的数目定义为顶点关联的边的数目定义为顶点v v的的度度。B顶点的出度出度:以顶点v为弧尾的弧的数目;ABECF对有向图来说对有向图来说,顶点的入度入度:以顶点v为弧头的弧的数目。顶点的度度(TD)=)=出度出度(OD)+)+入度入度(ID)例如例如:ID(B)=2OD(B)=1TD(B)=3设图G=(V,VR)中的一个顶点序列 u=vi,0,vi,1,vi,m=w中,(v
5、i,j-1,vi,j)VR 1jm,则称从顶点u 到顶点w 之间存在一条路径路径。路径上边的数目称作路径长度路径长度。ABECF如如:长度为3的路径A,B,C,F简单路径简单路径:序列中顶点不重复出现的路径。简单回路简单回路:序列中第一个顶点和最后一个顶点相同的路径。若图若图G G中任意两个顶中任意两个顶点之间都有路径相通点之间都有路径相通,则称此图为则称此图为连通图连通图;若无向图为非连通图,若无向图为非连通图,则图中各个极大连通则图中各个极大连通子图称作此图的子图称作此图的连通连通分量分量。BACDFEBACDFE 若任意两个顶点之间都存在一条有向路径,则称此有向图为强连通图强连通图。AB
6、ECFABECF对有向图,对有向图,否则,其各个强连通子图称作它的强连通分量强连通分量。假设一个连通图有 n 个顶点和 e 条边,其中 n-1 条边和 n 个顶点构成一个极小连通子图,称该极小连通子图为此连通图的生成树生成树。对非连通图,则称由各个连通分量的生成树的集合为此非连通图的生成森林生成森林。BACDFE结构的建立和销毁结构的建立和销毁插入或删除顶点插入或删除顶点对邻接点的操作对邻接点的操作对顶点的访问操作对顶点的访问操作遍历遍历插入和删除弧插入和删除弧基本操作基本操作CreatGraph(&G,V,VR):/按定义(V,VR)构造图DestroyGraph(&G):/销毁图结构的建立
7、和销毁结构的建立和销毁对顶点的访问操作对顶点的访问操作LocateVex(G,u);/若G中存在顶点u,则返回该顶点在/图中“位置位置”;否则返回其它信息。GetVex(G,v);/返回 v 的值。PutVex(&G,v,value);/对 v 赋值value。对邻接点的操作对邻接点的操作FirstAdjVex(G,v);/返回 v 的“第一个邻接点第一个邻接点”。若该顶点/在 G 中没有邻接点,则返回“空”。NextAdjVex(G,v,w);/返回 v 的(相对于 w 的)“下一个邻接下一个邻接/点点”。若 w 是 v 的最后一个邻接点,则/返回“空”。插入或删除顶点插入或删除顶点Inse
8、rtVex(&G,v);/在图G中增添新顶点v。DeleteVex(&G,v);/删除G中顶点v及其相关的弧。插入和删除弧插入和删除弧InsertArc(&G,v,w);/在G中增添弧,若G是无向的,/则还增添对称弧。DeleteArc(&G,v,w);/在G中删除弧,若G是无向的,/则还删除对称弧。遍遍 历历DFSTraverse(G,v,Visit();/从顶点v起深度优先深度优先遍历图G,并对每/个顶点调用函数Visit一次且仅一次。BFSTraverse(G,v,Visit();/从顶点v起广度优先广度优先遍历图G,并对每/个顶点调用函数Visit一次且仅一次。7.2 图的存储表示图的
9、存储表示一、一、图的数组(邻接矩阵)存储表示二、图的邻接表存储表示三、有向图的十字链表存储表示 四、无向图的邻接多重表存储表示Aij=0 (i,j)VR1 (i,j)VR一、一、图的数组(邻接矩阵)存储表示BACDFE定义定义:矩阵的元素为矩阵的元素为无向图的邻接矩阵为对称矩阵无向图的邻接矩阵为对称矩阵A B C D E FABCDEF有向图的邻接矩阵为非对称矩阵有向图的邻接矩阵为非对称矩阵ABDCEA B C D EABCDE邻接矩阵表示法特点:邻接矩阵表示法特点:1 1)无向图邻接矩阵是对称矩阵,同一条边表示了两次;)无向图邻接矩阵是对称矩阵,同一条边表示了两次;2 2)顶点)顶点v v的
10、度:在无向图中等于二维数组对应行(或列)的度:在无向图中等于二维数组对应行(或列)中中1 1的个数;在有向图中的个数;在有向图中,统计第统计第 i i 行行 1 1 的个数可得的个数可得顶点顶点 i i 的出度,统计第的出度,统计第 j j 列列 1 1 的个数可得顶点的个数可得顶点 j j 的的入度。入度。3 3)判断两顶点)判断两顶点v v、u u是否为邻接点:只需判二维数组对应是否为邻接点:只需判二维数组对应分量是否为分量是否为1 1;4 4)顶点不变,在图中增加、删除边:只需对二维数组对)顶点不变,在图中增加、删除边:只需对二维数组对应分量赋值应分量赋值1 1或清或清0 0;5 5)设
11、存储顶点的一维数组大小为)设存储顶点的一维数组大小为n(n(图的顶点数图的顶点数n),Gn),G占占用存储空间:用存储空间:n+nn+n2 2;G G占用存储空间只与它的顶点数有关占用存储空间只与它的顶点数有关,与边数无关;适用于边稠密的图;,与边数无关;适用于边稠密的图;typedef struct ArcCell /弧的定义弧的定义 VRType adj;/VRType是顶点关系类型 /对无权图,用1或0表示相邻否;/对带权图,则为权值类型。InfoType *info;/该弧相关信息的指针 ArcCell,AdjMatrixMAX_VERTEX_NUM MAX_VERTEX_NUM;ty
12、pedef struct /图的定义图的定义 VertexType /顶点信息 vexsMAX_VERTEX_NUM;AdjMatrix arcs;/弧的信息 int vexnum,arcnum;/顶点数,弧数 GraphKind kind;/图的种类标志 MGraph;网络的邻接矩阵网络的邻接矩阵ABDCE15972111320 A 1 41 B 0 4 52 C 3 53 D 2 54 E 0 15 F 1 2 3BACDFE二、图的邻接表二、图的邻接表 存储表示存储表示 同一个顶点发出的边同一个顶点发出的边链接在同一个边链表中链接在同一个边链表中,每一个链结点代表一,每一个链结点代表一条
13、边条边(边结点边结点),结点中有结点中有另一顶点的下标另一顶点的下标 adjvex 和指针和指针 nextedge。1 4230 1201234 A B C D E有向图的邻接表有向图的邻接表ABECD可见,在有向图的可见,在有向图的邻接表中不易找到邻接表中不易找到指向该顶点的弧。指向该顶点的弧。ABECD有向图的逆邻接表有向图的逆邻接表A B C D E 303420 01234在有向图的邻接表在有向图的邻接表中,对每个顶点,中,对每个顶点,链接的是指向该顶链接的是指向该顶点的弧。点的弧。邻接表表示法特点:邻接表表示法特点:1 1)无向图邻接表边结点数是边数的两倍)无向图邻接表边结点数是边数
14、的两倍.2 2)顶点)顶点vivi的度:在无向图中等于第的度:在无向图中等于第i i个链表中的个链表中的结点数;在有向图邻接表中结点数;在有向图邻接表中,第第i i行的结点数等于行的结点数等于顶点顶点i i的出度,在有向图逆邻接表中的出度,在有向图逆邻接表中,第第i i行的结点行的结点数等于顶点数等于顶点i i的入度。的入度。3 3)在邻接表上容易找到任一顶点的第一个邻接点)在邻接表上容易找到任一顶点的第一个邻接点和下一个邻接点和下一个邻接点4 4)设存储顶点的一维数组大小为)设存储顶点的一维数组大小为n(n(图的顶点数图的顶点数n),n),G G占用存储空间:占用存储空间:n+en+e;G
15、G占用存储空间与它的顶占用存储空间与它的顶点数和边数有关;适用于边稀疏的图;点数和边数有关;适用于边稀疏的图;typedef struct ArcNode int adjvex;/该弧所指向的顶点的位置 struct ArcNode *nextarc;/指向下一条弧的指针 InfoType *info;/该弧相关信息的指针 ArcNode;adjvex nextarc info弧的结点结构弧的结点结构typedef struct VNode VertexType data;/顶点信息 ArcNode *firstarc;/指向第一条依附该顶点的弧 VNode,AdjListMAX_VERTEX
16、_NUM;data firstarc顶点的结点结构顶点的结点结构typedef struct AdjList vertices;int vexnum,arcnum;int kind;/图的种类标志 ALGraph;图的结构定义图的结构定义三、有向图的十字链表存储表示三、有向图的十字链表存储表示 弧的结点结构弧的结点结构弧尾顶点位置 弧头顶点位置 弧的相关信息指向下一个有相同弧尾有相同弧尾的结点指向下一个有相同弧头有相同弧头的结点typedef struct ArcBox /弧的结构表示弧的结构表示 int tailvex,headvex;InfoType *info;struct ArcBox
17、 *hlink,*tlink;VexNode;顶点的结点结构顶点的结点结构顶点信息数据 指向该顶点的第一条入弧第一条入弧指向该顶点的第一条出弧第一条出弧typedef struct VexNode /顶点的结构表示顶点的结构表示 VertexType data;ArcBox *firstin,*firstout;VexNode;typedef struct VexNode xlistMAX_VERTEX_NUM;/顶点结点(表头向量)int vexnum,arcnum;/有向图的当前顶点数和弧数 OLGraph;有向图的结构表示有向图的结构表示(十字链表十字链表)ABCDABCD0102202
18、33031320123四、无向图的邻接多重表存储表示typedef struct Ebox VisitIf mark;/访问标记 int ivex,jvex;/该边依附的两个顶点的位置 struct EBox *ilink,*jlink;InfoType *info;/该边信息指针 EBox;边的结构表示边的结构表示typedef struct /邻接多重表邻接多重表 VexBox adjmulistMAX_VERTEX_NUM;int vexnum,edgenum;AMLGraph;顶点的结构表示顶点的结构表示typedef struct VexBox VertexType data;EBo
19、x *firstedge;/指向第一条依附该顶点的边 VexBox;无向图的结构表示无向图的结构表示ABCDE01234ABCDE0103212324417.3 图的遍历图的遍历 从图中某个顶点出发游历图,访遍图中其余顶点,并且使图中的每个顶点仅被访问一次的过程。深度优先搜索深度优先搜索广度优先搜索广度优先搜索遍历应用举例遍历应用举例 从图中某个顶点V0 出发,访问此顶点,然后依次从依次从V0的各个未被访问的邻接的各个未被访问的邻接点出发深度优先搜索遍历图点出发深度优先搜索遍历图,直至图中所有和V0有路径相通的顶点都被访问到。一、深度优先搜索遍历图一、深度优先搜索遍历图连通图的深度优先搜索遍历
20、连通图的深度优先搜索遍历Vw1SG1SG2SG3W1、W2和和W3 均为均为 V 的邻接点,的邻接点,SG1、SG2 和和 SG3 分别为含顶点分别为含顶点W1、W2和和W3 的子图。的子图。访问顶点访问顶点 V:for(W1、W2、W3)若若该邻接点该邻接点W未被访问未被访问,则则从它出发进行深度优先搜索遍历。从它出发进行深度优先搜索遍历。w2w3w2从上页的图解可见从上页的图解可见:1.从深度优先搜索遍历连通图的过程类似于树的先根遍历;解决的办法是:为每个顶点设立一个“访问标志 visitedw”。2.如何判别V的邻接点是否被访问?acbdegfF F F F F F F T T T T
21、T T Tacb d gfe acbgfed访问标志访问标志:访问次序访问次序:例如例如:0 1 2 3 4 5 6 0234516void DFS(Graph G,int v)/从顶点从顶点v出发,出发,深度优先搜索遍历连通图深度优先搜索遍历连通图 G visitedv=TRUE;VisitFunc(v);for(w=FirstAdjVex(G,v);w!=0;w=NextAdjVex(G,v,w)if(!visitedw)DFS(G,w);/对v的尚未访问的邻接顶点w /递归调用DFS/DFS 首先将图中每个顶点的访问标志设为 FALSE,之后搜索图中每个顶点,如果未被访问,则以该顶点为起
22、始点,进行深度优先搜索遍历,否则继续检查下一顶点。非连通图的深度优先搜索遍历非连通图的深度优先搜索遍历abchdekfgF F F F F F F F FT T T T T T T TTach d kfe bgachkfedbg访问标志访问标志:访问次序访问次序:例如例如:0 1 2 3 4 5 6 7 8021345678void DFSTraverse(Graph G,Status(*Visit)(int v)/对图对图 G 作深度优先遍历。作深度优先遍历。VisitFunc=Visit;for(v=0;vG.vexnum;+v)visitedv=FALSE;/访问标志数组初始化 for(
23、v=0;vw1,V-w2,V-w8 的路径长度为的路径长度为1;V-w7,V-w3,V-w5 的的路径长度为路径长度为2;V-w6,V-w4 的路径长度为的路径长度为3。w1Vw2w7w6w3w8w5w4 从图中的某个顶点从图中的某个顶点V0出发,并在访问此顶点出发,并在访问此顶点之后之后依次访问依次访问V0的所有的所有未被访问未被访问过的邻接点过的邻接点,之后分别从这些邻接点出发依次访问它们的邻之后分别从这些邻接点出发依次访问它们的邻接点,并使接点,并使“先被访问的顶点的邻接点先被访问的顶点的邻接点”先于先于“后被访问的顶点的邻接点后被访问的顶点的邻接点”被访问被访问,直至图,直至图中所有和
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 课件 第七
![提示](https://www.taowenge.com/images/bang_tan.gif)
限制150内