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