图及其基本算法幻灯片.ppt
《图及其基本算法幻灯片.ppt》由会员分享,可在线阅读,更多相关《图及其基本算法幻灯片.ppt(83页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、图及其基本算法第1页,共83页,编辑于2022年,星期五图的概念图的概念图(图(graph)是图型结构的简称。它是一种复杂的非线性)是图型结构的简称。它是一种复杂的非线性数据结构。图在各个领域都着广泛的应用。图的二元组定数据结构。图在各个领域都着广泛的应用。图的二元组定义为:义为:G=(V,E)其中其中V是非空的顶点集合,即是非空的顶点集合,即 V=vi|1=i=1,vi elemtype,n 为为顶点数顶点数 E是是V上顶点的序偶或无序对的集合,即对应边上顶点的序偶或无序对的集合,即对应边的集合。的集合。第2页,共83页,编辑于2022年,星期五123412453图1 有向图图2 无向图第3
2、页,共83页,编辑于2022年,星期五图的基本术语图的基本术语 1、端点和邻接点、端点和邻接点 在一个无向图中,若存在一条边在一个无向图中,若存在一条边(vi,vj),则称),则称vi,vj为此边的两个端点,并称它们互为邻接点(为此边的两个端点,并称它们互为邻接点(adjacent),),即即vi是是vj的一个邻接点,的一个邻接点,vj也是也是vi的一个邻接点。的一个邻接点。在一个有向图中,若存在一条边在一个有向图中,若存在一条边,则称此边,则称此边是顶点是顶点vi的一条出边(的一条出边(outedge),顶点),顶点vj的一条入边的一条入边(inedge););称称Vi为此边的起始端点,简称
3、起点或为此边的起始端点,简称起点或始点,始点,vj为此边的终止端点,简称终点;称为此边的终止端点,简称终点;称vi和和vj互为邻互为邻接点,并称接点,并称vj是是vi的出边邻接点,的出边邻接点,vi是是vj的入边邻接点。的入边邻接点。第4页,共83页,编辑于2022年,星期五 2、顶点的度、入度、出度顶点的度、入度、出度 无向图顶点无向图顶点v的度(的度(degree)定义为以)定义为以该顶点为一个端点的边的数目,简单地说,该顶点为一个端点的边的数目,简单地说,就是该顶点的边的数目,记为就是该顶点的边的数目,记为D(v)。如图)。如图2中中v1顶点的度为顶点的度为2,v2顶点的度为顶点的度为3
4、。有向。有向图中顶点图中顶点v的度有入度和出度之分,入度的度有入度和出度之分,入度(indegree)是该顶点的入边的数目,记为)是该顶点的入边的数目,记为ID(v);出度();出度(outdegree)是该顶点的)是该顶点的出边的数目,记为出边的数目,记为OD(v)顶点)顶点v的度等于的度等于它的入度和出度之和,即它的入度和出度之和,即D(v)=ID(v)+OD(v)。)。第5页,共83页,编辑于2022年,星期五 3、完全图、稠密图、稀疏图、完全图、稠密图、稀疏图 若无向图中的每两个顶点之间都存在着若无向图中的每两个顶点之间都存在着一条边,有向图中的每两个顶点之间都存在一条边,有向图中的每
5、两个顶点之间都存在着方向相反的两条边,则称此图为完全图。着方向相反的两条边,则称此图为完全图。显然,若完全图是无向的,则图中包含有显然,若完全图是无向的,则图中包含有n(n-1)/2条边条边,若完全图是有向的,则图若完全图是有向的,则图中包含有中包含有n(n-1)条边。当一个图接近完全)条边。当一个图接近完全图时,则可称为稠密图,相反地,当一个图图时,则可称为稠密图,相反地,当一个图有较少的边数(即有较少的边数(即e n(n 1)时,则)时,则可称为稀疏图。可称为稀疏图。第6页,共83页,编辑于2022年,星期五12543G112543G212543G3第7页,共83页,编辑于2022年,星期
6、五 4、子图子图 设有两个图设有两个图G=(V,E)和)和G (V,E),若若V是是V的子集,且的子集,且E是是E的子集,则的子集,则称称G是是G的子图。的子图。12453124531245图图的子图第8页,共83页,编辑于2022年,星期五5、路径和回路、路径和回路 在一个图在一个图G中,从顶点中,从顶点v到顶点到顶点v的一条路径的一条路径(path)是一个顶点序列)是一个顶点序列vi0,vi1,vi2,.,vim,其中其中v=vi0,v=vim,若此图是无向图,则(若此图是无向图,则(vi,j-1,vij)E(G),(),(1jm);若此图是有向图,则);若此图是有向图,则E(G),(),
7、(1jm)。路径长度是指该路径)。路径长度是指该路径上经过的边的数目。若一条路径上除了前后端点可以上经过的边的数目。若一条路径上除了前后端点可以相同外,所有顶点均不同,则称此路径为简单路径。相同外,所有顶点均不同,则称此路径为简单路径。若一条路径上的前后两端点相同,则被称为回路或环若一条路径上的前后两端点相同,则被称为回路或环(cycle),前后两端点相同的简单路径被称为简单),前后两端点相同的简单路径被称为简单回路或简单环回路或简单环。第9页,共83页,编辑于2022年,星期五6、连通和连通分量、连通和连通分量 在无向图在无向图G中,若从顶点中,若从顶点vi到顶点到顶点vj有路径,则称有路径
8、,则称vi和和vj是连通的。若图是连通的。若图G中任中任意两个顶点都连通,则称意两个顶点都连通,则称G为连通图,否为连通图,否则称为非连通图。无向图则称为非连通图。无向图G的极大连通子的极大连通子图称为图称为G的连通分量。显然,任何连通图的连通分量。显然,任何连通图的连通分量只有一个,即本身,而非连通的连通分量只有一个,即本身,而非连通图有多个连通分量。图有多个连通分量。第10页,共83页,编辑于2022年,星期五1254376G11254G1136G127G13第11页,共83页,编辑于2022年,星期五7、强连通图和强连通分量、强连通图和强连通分量 在有向图在有向图G中,若从顶点中,若从顶
9、点vi到顶点到顶点vj有有路径,则称从路径,则称从vi到到vj是连通的。若图是连通的。若图G中的中的任意两个顶点任意两个顶点vi和和vj都连通,即从都连通,即从vi到到vj和和从从vj到到vi都存在路径,则称都存在路径,则称G是强连通图。是强连通图。有向图有向图G的极大强连通子图称为的极大强连通子图称为G的强连通的强连通分量。显然,强连通图只有一个强连通分分量。显然,强连通图只有一个强连通分量,即本身,非强连通图有多个强连通分量,即本身,非强连通图有多个强连通分量。量。第12页,共83页,编辑于2022年,星期五12543G112543G2125G2143G22第13页,共83页,编辑于202
10、2年,星期五8、权和网、权和网 在一个图中每条边可以标上具有某种在一个图中每条边可以标上具有某种含义的数值,此数值称为该边的权含义的数值,此数值称为该边的权(weight)。例如,对于一个反映城市交)。例如,对于一个反映城市交通线路的图,边上的权可表示该条线路的长通线路的图,边上的权可表示该条线路的长度或等级;对于一个反映电子线路的图,边度或等级;对于一个反映电子线路的图,边上的权可表示两端点间的电阻、电流或电压;上的权可表示两端点间的电阻、电流或电压;对于一个反映零件装配的图,边上的权可表对于一个反映零件装配的图,边上的权可表示一个端点需要装配另一个端点的零件的数示一个端点需要装配另一个端点
11、的零件的数量;对于一个反映工程进度的图,边上的权量;对于一个反映工程进度的图,边上的权可表示从前一子工程到后一子工程所需要的可表示从前一子工程到后一子工程所需要的天数。边上带有权的图称作带权图,也常称天数。边上带有权的图称作带权图,也常称作网(作网(network)。)。第14页,共83页,编辑于2022年,星期五 图的存储结构图的存储结构 1、邻接矩阵邻接矩阵 邻接矩阵(邻接矩阵(adjacency matrix)是表示顶点之间相邻关)是表示顶点之间相邻关系的矩阵。设系的矩阵。设G(V,E)是具有)是具有n个顶点的图,顶点个顶点的图,顶点序号依次为序号依次为1、2、n,则,则G的邻接矩阵是具
12、有的邻接矩阵是具有如下定义的如下定义的n阶方阵。阶方阵。第15页,共83页,编辑于2022年,星期五邻接矩阵的表示1234有向图12453无向图第16页,共83页,编辑于2022年,星期五2、邻接表邻接表 邻接表(邻接表(adjacency list)是对图中的)是对图中的每个顶点建立一个邻接关系的单链表,并把每个顶点建立一个邻接关系的单链表,并把它们的表头指针用向量存储的一种图的表示它们的表头指针用向量存储的一种图的表示方法。为顶点方法。为顶点vi建立的邻接关系的单链表又建立的邻接关系的单链表又称作称作vi的邻接表。的邻接表。vi邻接表中的每个结点用邻接表中的每个结点用来存储以该顶点为端点或
13、起点的一条边的信来存储以该顶点为端点或起点的一条边的信息,因而被称为边结点。息,因而被称为边结点。vi邻接表中的结点邻接表中的结点数,对于无向图来说,等于数,对于无向图来说,等于vi的边数,邻接的边数,邻接点数或度数;对于有向图来说,等于点数或度数;对于有向图来说,等于vi的出的出边数、出边邻接点数或出度数。边数、出边邻接点数或出度数。第17页,共83页,编辑于2022年,星期五邻接表描述边结点:Eptr=enode;Eode=record adjvex:1.n;w:wtype;next:eptr end;vexnode=record data:datatype link:eptr;end;A
14、djlnk=array1.n of vexnode;Proc create(G)For i:=1 to n do begin input(gi.data);gi.link:=nil;end;For k:=1 to e do begin input(i,j);new(s);s.adjvex:=j;s.next:=gi.link;gi.link:=s;end;第18页,共83页,编辑于2022年,星期五1234有向图12342341有向图邻接表12453无向图4253543132123512无向图邻接表4第19页,共83页,编辑于2022年,星期五3、边集数组边集数组 边集数组(边集数组(edge
15、set array)是利用一维)是利用一维数组存储图中所有边的一种图的表示方法。数组存储图中所有边的一种图的表示方法。该数组中所含元素的个数要大于等于图中边该数组中所含元素的个数要大于等于图中边的条数,每个元素用来存储一条边的起点、的条数,每个元素用来存储一条边的起点、终点(对于无向图,可选定边的任一端点为终点(对于无向图,可选定边的任一端点为起点或终点)和权(若有的话),下各边在起点或终点)和权(若有的话),下各边在数组中的次序可任意安排,也可根据具体要数组中的次序可任意安排,也可根据具体要求而定。求而定。第20页,共83页,编辑于2022年,星期五 图的遍历图的遍历 1、深度优先遍历深度优
16、先遍历 深度优先搜索(深度优先搜索(depth first search)遍历类似树的先根遍历,它是一个递归过程)遍历类似树的先根遍历,它是一个递归过程.可叙述为:首先访问一个顶点可叙述为:首先访问一个顶点vi(开始为初始点),并将其标记为已访问过,然后从(开始为初始点),并将其标记为已访问过,然后从vi的一的一个未被访问的邻接点(无向图)或出边邻接点(有向图)出发进行深度优先搜索遍历,当个未被访问的邻接点(无向图)或出边邻接点(有向图)出发进行深度优先搜索遍历,当vi的所有邻接点均被访问过时,则退回到上一个顶点的所有邻接点均被访问过时,则退回到上一个顶点vk,从,从vk的另一个未被访问过的邻
17、接点出的另一个未被访问过的邻接点出发进行深度优先搜索遍历。发进行深度优先搜索遍历。算法:算法:proc dfs(v)beign print(v);visitedv:=true;for j:=1 to n do if not visitedj and gv,j=1 then dfs(j);end第21页,共83页,编辑于2022年,星期五练习1:无向图的深度优先搜索【问题描述】从文件中读入无向图的信息,按深度优先搜索的方式遍历图中的每一个结点,并按访问的现后顺序将结点输出,以V1作为第一个访问的结点。【输入文件】第一行两个整数m和n,分别表示图的结点数和图中的边数。以下n行表示n条边:每一行两个
18、数x和y,表示x与y之间有一条边。【输出文件】一行:结点的序列。【示例】输入:输出:5 5 1 2 5 3 4 1 2 1 3 2 5 3 5 4 5 第22页,共83页,编辑于2022年,星期五2、广度优先搜索遍历、广度优先搜索遍历 广度优先搜索(广度优先搜索(breadthfirst search)遍历类似树的按层遍历,其过程为:首先访问初始点)遍历类似树的按层遍历,其过程为:首先访问初始点vi,并将其标记为已访问过,接着访问并将其标记为已访问过,接着访问vi的所有未被访问过的邻接点的所有未被访问过的邻接点vi1,vi2,vit并并均标记为已访问过,然后再按照均标记为已访问过,然后再按照v
19、i1,vi2,vit的次序,访问每一个顶点的所有未被的次序,访问每一个顶点的所有未被访问过的邻接点,并均标记为已访问过,依次类推,直到图中所有和初始点访问过的邻接点,并均标记为已访问过,依次类推,直到图中所有和初始点vi有路径相通的顶有路径相通的顶点都被访问过为止。点都被访问过为止。算法:算法:proc bfs(v)begin setnull(Q);print(v);visitedv:=true;insert(Q,v);repeat h:=delete(Q);for j:=1 to n do if not visitedj and gh,j=1 then begin print(j);visi
20、tedj:=true;insert(Q,j);end;until empty(Q);end;第23页,共83页,编辑于2022年,星期五练习2:无向图的广度优先搜索【问题描述】从文件中读入无向图的信息,按广度优先搜索的方式遍历图中的每一个结点,并按访问的现后顺序将结点输出,以V1作为第一个访问的结点。【输入文件】第一行两个整数m和n,分别表示图的结点数和图中的边数。以下n行表示n条边:每一行两个数x和y,表示x与y之间有一条边。【输出文件】一行:结点的序列。【示例】输入:输出:5 5 1 2 3 5 4 1 2 1 3 2 5 3 5 4 5 第24页,共83页,编辑于2022年,星期五非连通
21、图的遍历非连通图的遍历 前面提到的深度优先遍历和广度优先遍前面提到的深度优先遍历和广度优先遍历都只从图的一个顶点开始进行一次遍历,历都只从图的一个顶点开始进行一次遍历,对于连通图可以遍历到图的所有结点,但对于连通图可以遍历到图的所有结点,但如果图不连通,则有一部分结点无法访问如果图不连通,则有一部分结点无法访问到。修改很简单,每次选取任意一个没有到。修改很简单,每次选取任意一个没有被遍历过的结点开始一次遍历,重复此操被遍历过的结点开始一次遍历,重复此操作直到遍历完图的所有结点即可。作直到遍历完图的所有结点即可。第25页,共83页,编辑于2022年,星期五proc bfs(v)begin set
22、null(Q);print(v);visitedv:=true;flag:=flase;图中顶点是否访问完图中顶点是否访问完 while not flag do begin flag:=true;insert(Q,v);repeat h:=delete(Q);for j:=1 to n do if not visitedj and gh,j=1 then begin print(j);visitedj:=true;insert(Q,j);end;until empty(Q);for j:=1 to n do if visitedj=false then begin v:=j;flag:=fal
23、se;end;end;end;非连通图的遍历第26页,共83页,编辑于2022年,星期五图的连通分量对于连通图只有一个连通分量;对于非连通图有多个连通分量。如右图:有两个连通分量,它们分别是:1,2,34,512345第27页,共83页,编辑于2022年,星期五求连通分量的算法proc bfs(v)begin setnull(Q);print(v);visitedv:=true;flag:=flase;图中顶点是否访问完图中顶点是否访问完 while not flag do begin flag:=true;insert(Q,v);repeat h:=delete(Q);添加操作:将每一个出队
24、的顶点保存;添加操作:将每一个出队的顶点保存;for j:=1 to n do if not visitedj and gh,j=1 then begin print(j);visitedj:=true;insert(Q,j);end;until empty(Q);/repeat.until循环结束一次,得到一个连通循环结束一次,得到一个连通分量;分量;for j:=1 to n do if visitedj=false then begin v:=j;flag:=false;end;end;end;第28页,共83页,编辑于2022年,星期五练习3:求无向图的连通分量【问题描述】从文件中读入
25、无向图的信息,求出该图的连通分量个数。【输入文件】第一行两个整数m和n,分别表示图的结点数和图中的边数。以下n行表示n条边:每一行两个数x和y,表示x与y之间有一条边。【输出文件】输出一个整数,表示连通分量的个数。【示例】输入:输出:5 5 2 1 2 1 3 2 5 3 5 2 3第29页,共83页,编辑于2022年,星期五有向图的强连通图分量定义:在有向图G中,如果两个顶点间至少存在一条路径,称两个顶点强连通(strongly connected)。如果有向图G的每两个顶点都强连通,称G是一个强连通图。非强连通图有向图的极大强连通子图,称为强连通分量(strongly connected
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 及其 基本 算法 幻灯片
限制150内