数据结构-第七章-图精.ppt
《数据结构-第七章-图精.ppt》由会员分享,可在线阅读,更多相关《数据结构-第七章-图精.ppt(101页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、数据结构-第七章-图第1页,本讲稿共101页图的基本概念图的基本概念图定义图定义 图是由顶点集合图是由顶点集合(vertex)及顶点间的关系及顶点间的关系集合组成的一种数据结构:集合组成的一种数据结构:Graph(V,E)其中其中 V=x|x 某个数据对象某个数据对象 是顶点的有穷非空集合;是顶点的有穷非空集合;E1=(x,y)|x,y V 或或 E2=|x,y V&Path(x,y)其中,其中,E1是顶点之间关系的有穷集合,也叫做边是顶点之间关系的有穷集合,也叫做边(edge)集合,此时的图称为无向图。集合,此时的图称为无向图。E2 表示从表示从 x 到到 y 的一条弧,且称的一条弧,且称x
2、为弧尾,为弧尾,y为弧头,这样的图称为弧头,这样的图称为有向图。为有向图。第2页,本讲稿共101页n有向图与无向图有向图与无向图 在有向图中,顶点对在有向图中,顶点对 是有序的。在无向图中,顶点对是有序的。在无向图中,顶点对(x,y)是无是无序的。序的。n完全图完全图 若有若有 n 个顶点的无向图有个顶点的无向图有 n(n-1)/2 条边条边,则则此图为此图为无向完全图无向完全图。有。有 n 个顶点的有向图有个顶点的有向图有n(n-1)条边条边,则此图为则此图为有向完全图有向完全图。00001111222265433第3页,本讲稿共101页 n邻接顶点邻接顶点 如果如果(u,v)是是 E(G)
3、中的一条边,中的一条边,则称则称 u 与与 v 互为邻接顶点。互为邻接顶点。n子图子图 设有两个图设有两个图 G(V,E)和和 G(V,E)。若。若 V V 且且 E E,则称则称 图图G 是是 图图G 的子图。的子图。n权权 某些图的边具有与它相关的数某些图的边具有与它相关的数,称之为称之为权。这种带权图叫做网络。权。这种带权图叫做网络。0123子图子图0130123023第4页,本讲稿共101页n顶点的度顶点的度 一个顶点一个顶点v的度是与它相关联的的度是与它相关联的边的条数。记作边的条数。记作TD(v)。在有向图中。在有向图中,顶点顶点的度等于该顶点的入度与出度之和。的度等于该顶点的入度
4、与出度之和。n顶点顶点 v 的入度的入度是以是以 v 为终点的有向边的条为终点的有向边的条数数,记作记作 ID(v);顶点顶点 v 的出度的出度是以是以 v 为始点为始点的有向边的条数的有向边的条数,记作记作 OD(v)。n路径路径 在图在图 G(V,E)中中,若从顶点若从顶点 vi 出发出发,沿一些边经过一些顶点沿一些边经过一些顶点 vp1,vp2,vpm,到达顶点,到达顶点vj。则称顶点序列。则称顶点序列(vi vp1 vp2.vpm vj)为从顶点为从顶点vi 到顶点到顶点 vj 的路径。它的路径。它经过的边经过的边(vi,vp1)、(vp1,vp2)、.、(vpm,vj)应是属于应是属
5、于E的边。的边。第5页,本讲稿共101页顶点的出度顶点的出度:以顶点以顶点v 为弧为弧尾的弧的数目尾的弧的数目;顶点的入度顶点的入度:以顶点以顶点v v为弧为弧头的弧的数目。头的弧的数目。ABECF有向图有向图顶点的度顶点的度(TD)=)=出度出度(OD)+)+入度入度(ID)TD(B)=OD(B)+ID(B)=3例如例如:第6页,本讲稿共101页n路径长度路径长度 非带权图的路径长度是指此路径上边的条数。非带权图的路径长度是指此路径上边的条数。带权图的路径长度是指路径上各边的权之和。带权图的路径长度是指路径上各边的权之和。n简单路径简单路径 若路径上各顶点若路径上各顶点 v1,v2,.,vm
6、 均不均不 互相重复互相重复,则称这样的路径为简单路径。则称这样的路径为简单路径。n简单回路简单回路 若路径上第一个顶点若路径上第一个顶点 v1 与最后一个顶点与最后一个顶点vm 重合重合,则称这样的路径为回路或环。则称这样的路径为回路或环。012301230123第7页,本讲稿共101页ABECF如如:从从A A到到F F长度为长度为 3 的路的路径径A,B,C,F第8页,本讲稿共101页n连通图与连通分量连通图与连通分量 在无向图中在无向图中,若从顶点若从顶点v1到顶点到顶点v2有路径有路径,则称顶点则称顶点v1与与v2是连通是连通的。如果图中任意一对顶点都是连通的的。如果图中任意一对顶点
7、都是连通的,则称此图是连通图。非连通图的极大连通则称此图是连通图。非连通图的极大连通子图叫做连通分量。子图叫做连通分量。n强连通图与强连通分量强连通图与强连通分量 在有向图中在有向图中,若若对于每一对顶点对于每一对顶点vi和和vj,都存在一条从都存在一条从vi到到vj和从和从vj到到vi的路径的路径,则称此图是强连通图。则称此图是强连通图。非强连通图的极大强连通子图叫做强连通非强连通图的极大强连通子图叫做强连通分量。分量。第9页,本讲稿共101页无向图无向图,若图中任意两个若图中任意两个顶点之间都有路径相通,顶点之间都有路径相通,则称此图为则称此图为连通图连通图;若无向图为非连通图,则若无向图
8、为非连通图,则图中各个极大连通子图称图中各个极大连通子图称作此图的作此图的连通分量连通分量。BACDFEBACDFE第10页,本讲稿共101页有向图有向图,若任意两个顶点之间都存在一条有向路径,若任意两个顶点之间都存在一条有向路径,则称此有向图为则称此有向图为强连通图强连通图。否则,其各个强连通子图称作它的否则,其各个强连通子图称作它的强连通分量强连通分量。ABECFABECF第11页,本讲稿共101页n强连通图与强连通分量 在有向图中,若对于每一对顶点vi和vj,都存在一条从vi到vj和从vj到vi的路径,则称此图是强连通图。非强连通图的极大强连通子图叫做强连通分量。0 134 2 5 0
9、134 2 5第12页,本讲稿共101页生成树生成树:假设一个连通图有假设一个连通图有n个顶点和个顶点和e 条边,其中条边,其中n-1条边和条边和n个顶点构成一个极小连通子图,称该极个顶点构成一个极小连通子图,称该极小连通子图为此连通图的小连通子图为此连通图的生成树生成树。在极小连通子图极小连通子图中增加一条边,则一定有环。中增加一条边,则一定有环。在极小连通子图中去掉一条边,则成为非连通图。极小连通子图中去掉一条边,则成为非连通图。BACDFEBACDFE第13页,本讲稿共101页有有n个顶点,个顶点,n-1条边的图必定是生成树吗?条边的图必定是生成树吗?对非连通图,则称由各个连通分量的生成
10、对非连通图,则称由各个连通分量的生成树的集合为此非连通图的树的集合为此非连通图的生成森林生成森林。BACDFEBACDFE第14页,本讲稿共101页图的存储结构图的存储结构n在图的邻接矩阵表示中,有一个记录各个在图的邻接矩阵表示中,有一个记录各个顶点信息的顶点表,还有一个表示各个顶顶点信息的顶点表,还有一个表示各个顶点之间关系的邻接矩阵。点之间关系的邻接矩阵。n设图设图 A=(V,E)是一个有是一个有 n 个顶点的图个顶点的图,图图的邻接矩阵是一个二维数组的邻接矩阵是一个二维数组 A.edgenn,定义:定义:邻接矩阵邻接矩阵(Adjacency Matrix)第15页,本讲稿共101页n无向
11、图的邻接矩阵是对称的无向图的邻接矩阵是对称的;n有向图的邻接矩阵可能是不对称的。有向图的邻接矩阵可能是不对称的。0123012第16页,本讲稿共101页n在有向图中在有向图中,统计第统计第 i 行行 1 的个数可得顶点的个数可得顶点 i 的出度,统计第的出度,统计第 j 列列 1 的个数可得顶点的个数可得顶点 j 的的入度。入度。n在无向图中在无向图中,统计第统计第 i 行行(列列)1 的个数可得的个数可得顶点顶点i 的度。的度。第17页,本讲稿共101页186329542031网络的邻接矩阵网络的邻接矩阵第18页,本讲稿共101页#define MaxValue Int_Maxconst i
12、nt NumEdges=50;/边条数边条数const int NumVertices=10;/顶点个数顶点个数typedef char VertexData;/顶点数据类型顶点数据类型 typedef int EdgeData;/边上权值类型边上权值类型typedef struct VertexData vexListNumVertices;/顶点表顶点表 EdgeData EdgeNumVerticesNumVertices;/邻接矩阵邻接矩阵,可视为边之间的关系可视为边之间的关系 int n,e;/图中当前的顶点个数与边数图中当前的顶点个数与边数 MTGraph;用邻接矩阵表示的结构定义
13、用邻接矩阵表示的结构定义第19页,本讲稿共101页邻接表邻接表(Adjacency List)邻接表邻接表:是图的一种链式存储结构。是图的一种链式存储结构。弧的结点结构弧的结点结构adjvex;/该弧所指向的顶点的位置该弧所指向的顶点的位置nextarc;/指向下一条弧指针指向下一条弧指针 info;/该弧相关信息的指针该弧相关信息的指针adjvex nextarc info顶点的结点结构顶点的结点结构 data firstarc data;/顶点信息顶点信息firstarc;/指向第一条依附该顶点的弧指向第一条依附该顶点的弧第20页,本讲稿共101页无向图的邻接表无向图的邻接表 同一个顶点发
14、出的边链接在同一个边链表同一个顶点发出的边链接在同一个边链表中,每一个链结点代表一条边中,每一个链结点代表一条边(边结点边结点),结点中有另一顶点的下标结点中有另一顶点的下标 dest 和指针和指针 link。ABCDdata adjABCD0123dest linkdest link 130210第21页,本讲稿共101页有向图的邻接表和逆邻接表有向图的邻接表和逆邻接表ABCdata adjABC012dest linkdest link 邻接表邻接表(出边表出边表)data adjABC012dest link逆邻接表逆邻接表(入边表入边表)102 011第22页,本讲稿共101页n网络网
15、络(带权图带权图)的邻接表的邻接表BACD69528data adjABCD0123dest cost link 1 53 62 83 21 9(出边表出边表)(顶点表顶点表)第23页,本讲稿共101页n带权图的边结点中保存该边上的权值带权图的边结点中保存该边上的权值 cost。n顶点顶点 i 的边链表的表头指针的边链表的表头指针 adj 在顶点表的在顶点表的下标为下标为 i 的顶点记录中,该记录还保存了该的顶点记录中,该记录还保存了该顶点的其它信息。顶点的其它信息。n在邻接表的边链表中,各个边结点的链入顺在邻接表的边链表中,各个边结点的链入顺序任意,视边结点输入次序而定。序任意,视边结点输入
16、次序而定。n设图中有设图中有 n 个顶点,个顶点,e 条边,则用邻接表表条边,则用邻接表表示无向图时,需要示无向图时,需要 n 个顶点结点,个顶点结点,2e 个边个边结点;用邻接表表示有向图时,若不考虑逆结点;用邻接表表示有向图时,若不考虑逆邻接表,只需邻接表,只需 n 个顶点结点,个顶点结点,e 个边结点。个边结点。第24页,本讲稿共101页typedef char VertexData;/顶点数据类型顶点数据类型typedef int EdgeData;/边上权值类型边上权值类型typedef struct node /边结点边结点 int dest;/目标顶点下标目标顶点下标 EdgeD
17、ata cost;/边上的权值边上的权值 Struct node*link;/下一边链接指针下一边链接指针 EdgeNode;邻接表表示的网的定义邻接表表示的网的定义第27页,本讲稿共101页typedef struct /顶点结点顶点结点 VertexData data;/顶点数据域顶点数据域 EdgeNode*firstAdj;/边链表头指针边链表头指针 VertexNode;typedef struct /图的邻接表图的邻接表 VertexNode VexList NumVertices;/邻接表邻接表 int n,e;/图中当前的顶点个数与边数图中当前的顶点个数与边数 AdjGraph
18、;第28页,本讲稿共101页邻接表的构造算法邻接表的构造算法(无向图无向图)void CreateGraph(AdjGraph G)cin G.n G.e;/输入顶点个数和边数输入顶点个数和边数 for(int i=0;i G.VexListi.data;/输入顶点信息输入顶点信息 G.VexListi.firstAdj=NULL;for(i=0;i tail head weight;EdgeNode*p=new EdgeNode;p-dest=head;p-cost=weight;第29页,本讲稿共101页 /链入第链入第 tail 号链表的前端号链表的前端 p-link=G.VexList
19、tail.firstAdj;G.VexListtail.firstAdj=p;p=new EdgeNode;p-dest=tail;p-cost=weight;/链入第链入第 head 号链表的前端号链表的前端 p-link=G.VexListhead.firstAdj;G.VexListhead.firstAdj=p;第30页,本讲稿共101页图的遍历图的遍历n从图中某一顶点出发访遍图中所有的顶点,从图中某一顶点出发访遍图中所有的顶点,且使每个顶点仅被访问一次,这一过程就叫且使每个顶点仅被访问一次,这一过程就叫做图的遍历做图的遍历(Traversing Graph)。n图中可能存在回路,且图
20、的任一顶点都可能图中可能存在回路,且图的任一顶点都可能与其它顶点相通,在访问完某个顶点之后可与其它顶点相通,在访问完某个顶点之后可能会沿着某些边又回到了曾经访问过的顶点。能会沿着某些边又回到了曾经访问过的顶点。n为了避免重复访问,可设置一个标志顶点是为了避免重复访问,可设置一个标志顶点是否被访问过的辅助数组否被访问过的辅助数组 visited 。第31页,本讲稿共101页n辅助数组辅助数组 visited 的初始状态为的初始状态为 0,在图在图的遍历过程中的遍历过程中,一旦某一个顶点一旦某一个顶点 i 被访问被访问,就立即让就立即让 visited i 为为 1,防止它被多次访防止它被多次访问
21、。问。n两种图的遍历方法两种图的遍历方法:u深度优先搜索深度优先搜索 DFS(Depth First Search)u广度优先搜索广度优先搜索 BFS(Breadth First Search)第32页,本讲稿共101页深度优先搜索深度优先搜索DFS(Depth First Search)n深度优先搜索过程深度优先搜索过程67ACDEGBFIHACDEGBFIH1234589123456789前进回退深度优先生成树深度优先生成树第33页,本讲稿共101页nDFS 在访问图中某一起始顶点在访问图中某一起始顶点 v 后后,由由 v 出出发发,访问它的任一邻接顶点访问它的任一邻接顶点 w1;再从再从
22、 w1 出发出发,访问与访问与 w1邻邻 接但还没有访问过的顶点接但还没有访问过的顶点 w2;然后再从然后再从 w2 出发出发,进行类似的访问进行类似的访问,如此如此进行下去进行下去,直至到达所有的邻接顶点都被访直至到达所有的邻接顶点都被访问过的顶点问过的顶点 u 为止。接着为止。接着,退回一步退回一步,退到退到前一次刚访问过的顶点前一次刚访问过的顶点,看是否还有其它没看是否还有其它没有被访问的邻接顶点。如果有有被访问的邻接顶点。如果有,则访问此顶则访问此顶点点,之后再从此顶点出发之后再从此顶点出发,进行与前述类似进行与前述类似的访问的访问;如果没有如果没有,就再退回一步进行搜索。就再退回一步
23、进行搜索。重复上述过程重复上述过程,直到连通图中所有顶点都被直到连通图中所有顶点都被访问过为止。访问过为止。第34页,本讲稿共101页 图的深度优先搜索算法图的深度优先搜索算法void Graph_Traverse(AdjGraph G)int*visited=new int NumVertices;for(int i=0;i G.n;i+)visited i=0;/访问数组访问数组 visited 初始化初始化 for(int i=0;i G.n;i+)if(!visitedi)DFS(G,i,visited);/从顶点从顶点 i 出发开始搜索出发开始搜索 delete visited;/释
24、放释放 visited 第35页,本讲稿共101页void DFS(AdjGraph G,int v,int visited )cout GetValue(G,v);/访问顶点访问顶点 v visitedv=1;/顶点顶点 v 作访问标记作访问标记 int w=GetFirstNeighbor(G,v);/取取 v 的第一个邻接顶点的第一个邻接顶点 w while(w!=-1)/若邻接顶点若邻接顶点 w 存在存在 if(!visitedw)DFS(G,w,visited);/若顶点若顶点 w 未访问过未访问过,递归访问顶点递归访问顶点 w w=GetNextNeighbor(G,v,w);/取
25、顶点取顶点 v 排在排在 w 后的下一个邻接顶点后的下一个邻接顶点 第36页,本讲稿共101页广度优先搜索广度优先搜索BFS(Breadth First Search)n广度优先搜索过程广度优先搜索过程ACDEGBFIHACDEGBFH123456789123456789广度优先生成树广度优先生成树I第37页,本讲稿共101页nBFS在访问了起始顶点在访问了起始顶点 v 之后之后,由由 v 出发出发,依依次访问次访问 v 的各个未被访问过的邻接顶点的各个未被访问过的邻接顶点 w1,w2,wt,然后再顺序访问然后再顺序访问 w1,w2,wt 的所有还未被访问过的邻接顶点。再从这些的所有还未被访问
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 第七 图精
限制150内