《图及其应用》PPT课件.ppt
《《图及其应用》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《图及其应用》PPT课件.ppt(118页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、17.1 抽象数据类型图的定义抽象数据类型图的定义7.2 图的存储表示图的存储表示7.3 图的遍历图的遍历7.4 最小生成树最小生成树 最短路径问题最短路径问题 拓扑排序拓扑排序、关键路径、关键路径21.熟悉图的各种熟悉图的各种存储结构存储结构及其及其构造算法构造算法,了解实际问题的求解效率,了解实际问题的求解效率与采用何种存储结构和算法有密切联系。与采用何种存储结构和算法有密切联系。2.熟练掌握图的两种搜索路径的熟练掌握图的两种搜索路径的遍历遍历:深度优先搜索和广度优先搜:深度优先搜索和广度优先搜索的算法。索的算法。3.图的算法应用。图的算法应用。学习提要学习提要3图图(Graph):图:图
2、G是由两个集合是由两个集合V(G)和和E(G)组成的组成的,记为记为G=(V,E)。其中:其中:V(G)是顶点的非空有限集,是顶点的非空有限集,E(G)是边的有限集合,边是边的有限集合,边是顶点的无序对或有序对。是顶点的无序对或有序对。有向图有向图:有向图:有向图G是由两个集合是由两个集合V(G)和和E(G)组成。组成。其中:其中:V(G)是顶点的非空有限集是顶点的非空有限集E(G)是有向边(也称弧)的是有向边(也称弧)的有限集合,弧是顶点的有序对,记为有限集合,弧是顶点的有序对,记为,v,w是顶点,是顶点,v为为弧尾弧尾,w为为弧头弧头。无向图无向图:无向图:无向图G是由两个集合是由两个集合
3、V(G)和和E(G)组成的。组成的。其中:其中:V(G)是顶点的非空有限集,是顶点的非空有限集,E(G)是边的有限集合,边是边的有限集合,边是顶点的无序对,记为是顶点的无序对,记为(v,w)或或(w,v),并且并且(v,w)=(w,v)图的定义和术语图的定义和术语4例:有向图例:有向图245136G1图图G1中:中:V(G1)=1,2,3,4,5,6E(G1)=,例:无向图例:无向图157324G26图图G2中:中:V(G2)=1,2,3,4,5,6,7 E(G1)=(1,2),(1,3),(2,3),(2,4),(2,5),(5,6),(5,7)5有向完备图有向完备图:n个顶点的有向图最大边
4、数是个顶点的有向图最大边数是n(n-1)。无向完备图无向完备图:n个顶点的无向图最大边数是个顶点的无向图最大边数是n(n-1)/2。213213有向完备图有向完备图无向完备图无向完备图6权权:与图的边或弧相关的数。:与图的边或弧相关的数。网网:带权的图:带权的图例例14523753186427子图子图:如果图:如果图G(V,E)和图和图G(V,E),满足:满足:V V,E E,则称则称G为为G的子图。的子图。3562451363568顶点的度顶点的度 无向图中,顶点的度为与每个顶点相连的边数。无向图中,顶点的度为与每个顶点相连的边数。有向图中,顶点的度分成入度与出度。有向图中,顶点的度分成入度
5、与出度。入度入度:以该顶点为头的弧的数目。:以该顶点为头的弧的数目。出度出度:以该顶点为尾的弧的数目。:以该顶点为尾的弧的数目。245136G1顶点顶点2入度:入度:1 出度:出度:3顶点顶点4入度:入度:1 出度:出度:0157324G26顶点顶点5的度:的度:3顶点顶点2的度:的度:49路径路径:路径是顶点的序列:路径是顶点的序列V=Vi,0,Vi,1,Vi,n,满足满足 (Vi,j-1,Vi,j)E 或或 E,(1j n)。路径长度路径长度:沿路径边的数目或沿路径各边权值之和。:沿路径边的数目或沿路径各边权值之和。回路回路:第一个顶点和最后一个顶点相同的路径。:第一个顶点和最后一个顶点相
6、同的路径。简单路径简单路径:序列中顶点不重复出现的路径叫:序列中顶点不重复出现的路径叫简单回路简单回路:除了第一个顶点和最后一个顶点外,其余:除了第一个顶点和最后一个顶点外,其余 顶点不重复出现的回路。顶点不重复出现的回路。G1245136路径:路径:1,2,3,5,6,3路径长度:路径长度:5简单路径:简单路径:1,2,3,5回路:回路:1,2,3,5,6,3,1简单回路:简单回路:3,5,6,310157324G26路径:路径:1,2,5,7,6,5,2,3路径长度:路径长度:7简单路径:简单路径:1,2,5,7,6回路:回路:1,2,5,7,6,5,2,1简单回路:简单回路:1,2,3,
7、111连通连通:从顶点:从顶点V到顶点到顶点W有路径,则说有路径,则说V和和W是连通的。是连通的。连通图连通图:图中任意两个顶点都是连通的图。:图中任意两个顶点都是连通的图。连通图连通图24513612连通分量连通分量:非连通图的每一个连通部分。:非连通图的每一个连通部分。强连通图强连通图:有向图中,如果对每一对:有向图中,如果对每一对Vi,Vj V,ViVj,从从Vi到到Vj 和从和从Vj到到 Vi都存在路径,则称都存在路径,则称G是强连通图。是强连通图。强连通图强连通图356245136非连通图非连通图连通分量连通分量137.2 图的存储表示图的存储表示一、图的数组(邻接矩阵)存储表示二、
8、图的邻接表存储表示二、图的邻接表存储表示三、有向图的十字链表存储表示三、有向图的十字链表存储表示 四、无向图的邻接多重表存储表示四、无向图的邻接多重表存储表示14Aij=0 (i,j)VR1 (i,j)VR图的数组(邻接矩阵)存储表示BACDFE定义定义:矩阵的元素为矩阵的元素为特点:特点:对称矩阵顶点的度数顶点的度数FirstAdjVex(G,v);NextAdjVex(G,v,w);如何求如何求?ABCDEF A B C D E F 15 从无向图的邻接矩阵可以得出如下从无向图的邻接矩阵可以得出如下结论结论(1)矩阵是对称的,可压缩存储(上(下)三角)矩阵是对称的,可压缩存储(上(下)三角
9、);(2)第)第i行或第行或第i 列中列中1的个数为顶点的个数为顶点i 的度的度;(3)矩阵中)矩阵中1的个数的一半为图中边的数目的个数的一半为图中边的数目;(4)很很容容易易判判断断顶顶点点i 和和顶顶点点j之之间间是是否否有有边边相相连连(看看矩矩阵阵中中i行行j列值是否为列值是否为1)。0111101011011010 16有向图的邻接矩阵有向图的邻接矩阵ABECD 从有向图的邻接矩阵可以得出如下从有向图的邻接矩阵可以得出如下结论结论(1)矩阵不一定是对称的矩阵不一定是对称的;(2)第第i 行中行中1的个数为顶点的个数为顶点i 的出度的出度;(3)第第i列中列中1的个数为顶点的个数为顶点
10、 i的入度的入度;(4)矩阵中矩阵中1的个数为图中弧的数目的个数为图中弧的数目;(5)很容易判断顶点很容易判断顶点i 和顶点和顶点j 是否有弧相连是否有弧相连.ABCDE A B C D E 17网的邻接矩阵表示网的邻接矩阵表示 类似地可以定义网的邻接矩阵为:类似地可以定义网的邻接矩阵为:wij 若(若(i,j)E(G)或或i,jE(G)其它情形其它情形Aij=12345 1 2 3 4 5 18const MAX_VERTEX_NUM=20;/最大顶点个数最大顶点个数typedef enum DG,DN,AG,AN GraphKind;/类型标志类型标志有向图有向图,有向网有向网,无向图无向
11、图,无向网无向网typedef struct ArcCell /弧的定义弧的定义 VRType adj;/VRType是顶点关系类型。是顶点关系类型。/对无权图,用对无权图,用1或或0表示相邻否;对带权图,则为权值类型。表示相邻否;对带权图,则为权值类型。InfoType*info;/该弧相关信息的指针该弧相关信息的指针 AdjMatrixMAX_VERTEX_NUMMAX_VERTEX_NUM;typedef struct /图的定义图的定义VertexType vexsMAX_VERTEX_NUM;/顶点信息顶点信息AdjMatrix arcs;/表示顶点之间关系的二维数组表示顶点之间关系
12、的二维数组int vexnum,arcnum;/图的当前顶点数和弧图的当前顶点数和弧(边边)数数GraphKind kind;/图的种类标志图的种类标志 MGraph;图的图的C语言描述语言描述19 容易实现图的操作,如:求某顶点的度、判断顶点之容易实现图的操作,如:求某顶点的度、判断顶点之间是否有边(弧)、找顶点的邻接点等等。间是否有边(弧)、找顶点的邻接点等等。n n个顶点需要个顶点需要n*nn*n个单元存储边个单元存储边(弧弧););空间效率为空间效率为O(nO(n2 2)。邻接矩阵存储方式的邻接矩阵存储方式的优点:优点:邻接矩阵邻接矩阵存储方式存储方式缺点:缺点:20 图的邻接表存储表
13、示图的邻接表存储表示顶点的度数顶点的度数FirstAdjVex(G,v);NextAdjVex(G,v,w);如何求如何求?例例1234acdbdata firstarc 4 2 1 2adjvexnext5e 4 3 5 1 5 3 2 3aecbdG21234521有向图的邻接表有向图的邻接表顶点的出度和入度顶点的出度和入度FirstAdjVex(G,v);NextAdjVex(G,v,w);如何求如何求?1234acdbdata firstarc 2 3 4 1adjvexnext例例G1bdac123422有向图的逆邻接表有向图的逆邻接表在有向图的邻接表中,对每个顶点,链接的是指向该顶
14、点的弧。例例G1bdac12341234acdbdata firstarc 4 1 adjvexnext 1323typedef struct ArcNode int adjvex;/该弧所指向的顶点的下标该弧所指向的顶点的下标 struct ArcNode *nextarc;/指向下一条弧的指针指向下一条弧的指针 InfoType *info;/该弧相关信息的指针该弧相关信息的指针 ArcNode;adjvex nextarc info弧的结点结构弧的结点结构typedef struct VNode VertexType data;/顶点信息顶点信息 ArcNode *firstarc;/指
15、向第一条依附该顶点的弧指向第一条依附该顶点的弧 VNode,AdjListMAX_VERTEX_NUM;data firstarc顶点的结点结构顶点的结点结构24typedef struct AdjList vertices;int vexnum,arcnum;int kind;/图的种类标志图的种类标志 ALGraph;图的结构定义图的结构定义例例G1bdac12341234acdbdata firstarc 4 1 adjvexnext 1325已知某网的邻接(出边)表,请画出该网络。已知某网的邻接(出边)表,请画出该网络。8064125当邻接表的当邻接表的存储结构形存储结构形成后,图便成
16、后,图便唯一确定!唯一确定!26讨论:邻接表与邻接矩阵有什么讨论:邻接表与邻接矩阵有什么异同异同之处?之处?1.1.联系:联系:邻接表中每个链表对应于邻接矩阵中的一行,邻接表中每个链表对应于邻接矩阵中的一行,链表中结点个数等于一行中非零元素的个数。链表中结点个数等于一行中非零元素的个数。2.2.区别:区别:对于任一确定的无向图,邻接矩阵是唯一的(行列对于任一确定的无向图,邻接矩阵是唯一的(行列号与顶点编号一致),但邻接表不唯一(链接次序号与顶点编号一致),但邻接表不唯一(链接次序与顶点编号无关)。与顶点编号无关)。邻接矩阵的空间复杂度为邻接矩阵的空间复杂度为O(nO(n2 2),),而邻接表的
17、空间复而邻接表的空间复杂度为杂度为O(n+e)O(n+e)。3.3.用途:用途:邻接矩阵多用于稠密图的存储(邻接矩阵多用于稠密图的存储(e e接近接近n(n-n(n-1)/2)1)/2);而邻接表多用于稀疏图的存储(;而邻接表多用于稀疏图的存储(enen2 2)27弧结点:弧结点:typedef struct arcnode int tailvex,headvex;/弧尾、弧头在表头数组中位置弧尾、弧头在表头数组中位置 struct arcnode *hlink;/指向弧头相同的下一条弧指向弧头相同的下一条弧 struct arcnode *tlink;/指向弧尾相同的下一条弧指向弧尾相同的下
18、一条弧arcbox;tailvex headvex hlink tlink顶点结点:顶点结点:typedef struct vexnode int data;/存与顶点有关信息存与顶点有关信息 struct arcnode *firstin;/指向以该顶点为弧头的第一个弧结点指向以该顶点为弧头的第一个弧结点 struct arcnode *firstout;/指向以该顶点为弧尾的第一个弧结点指向以该顶点为弧尾的第一个弧结点vexNode;data firstin firstout有向图的十字链表表示法有向图的十字链表表示法28typedef struct /十字链表结构定义十字链表结构定义Ve
19、xNode xlistMAX_VERTEX_NUM;/表头向量表头向量int vexnum,arcnum;/有向图的当前顶点数和弧数有向图的当前顶点数和弧数GraphKind kind;/图的种类标志图的种类标志 OLGraph;29ab cd12341 31 23 43 14 34 24 1例例bdac123430顶点结点顶点结点:typedef struct dnode int data;/存与顶点有关的信息存与顶点有关的信息 struct node *firstedge;/指向第一条依附于该顶点的边指向第一条依附于该顶点的边vexnode;data firstedge边结点边结点:typ
20、edef struct node int mark;/访问访问标记域标记域 int ivex,jvex;/该边依附的两个顶点在表头数组中位置该边依附的两个顶点在表头数组中位置 struct node *ilink,*jlink;/分别指向依附于分别指向依附于ivex和和jvex的下一条边的下一条边EgeNode;mark ivex ilink jvex jlink无向图的邻接多重表表示法无向图的邻接多重表表示法31typedef struct /多重链表结构定义VexNode adjmulistMAX_VERTEX_NUM;int vexnum,edgenum;/无向图的当前顶点数和边数Gra
21、phKind kind;/图的种类标志 AMLGraph;32例例aecbd1234acdb5e 1 2 1 4 3 4 3 2 3 5 5 233各种存储结构的适用类型w数组:数组:有向图和无向图有向图和无向图 w邻接表(逆邻接表):有向图和无向图邻接表(逆邻接表):有向图和无向图 n十字链表:十字链表:有向图有向图 n邻接多重表:邻接多重表:无向图无向图347.3 图的遍历图的遍历 从图中某个顶点出发游历图,访遍图中其余顶点,从图中某个顶点出发游历图,访遍图中其余顶点,并且使图中的每个顶点仅被访问一次的过程。并且使图中的每个顶点仅被访问一次的过程。深度优先搜索深度优先搜索广度优先搜索广度优
22、先搜索遍历应用举例遍历应用举例351、深度优先遍历、深度优先遍历(DFS)方法方法:从图的某一顶点:从图的某一顶点V0出发,访问此顶点;然后依次从出发,访问此顶点;然后依次从V0的未被访问的邻接点出发,深度优先遍历图,直至图中所的未被访问的邻接点出发,深度优先遍历图,直至图中所有和有和V0相通的顶点都被访问到;若此时图中尚有顶点未被访相通的顶点都被访问到;若此时图中尚有顶点未被访问,则另选图中一个未被访问的顶点作起点,重复上述过程,问,则另选图中一个未被访问的顶点作起点,重复上述过程,直至图中所有顶点都被访问为止。直至图中所有顶点都被访问为止。36例例2V1V2V4V5V3V7V6V8深度遍历
23、:深度遍历:V1 V2 V4 V8 V5 V6 V3 V7V1V2V4V5V3V7V6V8例例1深度遍历:深度遍历:V1 V2 V4 V8 V3 V6 V7 V524513637V1V2V4V5V3V7V6V8深度遍历:深度遍历:V112341342vexdatafirstarc 2 7 8 3adjvexnext55 6 4 1 5 1 2 8 2678678 7 3 6 3 5 4V3 V7 V6 V2 V5 V8 V438开始开始访问访问V0,置标志置标志求求V0邻接点邻接点有邻接点有邻接点w求下一邻接点求下一邻接点wV0W访问过访问过结束结束NYNYDFS开始开始标志数组初始化标志数组
24、初始化Vi=1Vi访问过访问过DFSVi=Vi+1Vi=Vexnums结束结束NNYY 深度优先遍历算法:递归算法深度优先遍历算法:递归算法39V1V2V4V5V3V7V6V812341342data firstarc 2 7 8 3adjvexnext55 6 4 8 2678678 7深度遍历:深度遍历:V1V3 V7 V6 V2 V4 V8 V5 void DFS(Graph G,int v)/从顶点从顶点v出发,深度优先搜索遍历图出发,深度优先搜索遍历图 G visitedv=TRUE;VisitFunc(v);for(w=FirstAdjVex(G,v);w!=0;w=NextAdj
25、Vex(G,v,w)if(!visitedw)DFS(G,w);/对对v的尚未访问的邻接顶点的尚未访问的邻接顶点w /递归调用递归调用DFS /DFS问题?问题?按该存储结构得到的按该存储结构得到的遍历次序是否唯一遍历次序是否唯一?40void DFSTraverse(ALGraph G)/对以邻接表表示的图对以邻接表表示的图G作深度优先遍历作深度优先遍历bool;/附设访问标识数组for(v=0;v;+v)visitedv=FALSE;/访问标识数组初始化for(v=0;v;+v)if(!visitedv)DFS(G,v);/对尚未访问的顶点调用DFS 41广度优先搜索遍历图广度优先搜索遍历
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 图及其应用 及其 应用 PPT 课件
限制150内