欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    数据结构图总结.pptx

    • 资源ID:87372640       资源大小:1.29MB        全文页数:116页
    • 资源格式: PPTX        下载积分:20金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要20金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    数据结构图总结.pptx

    图图的基本概念图的存储表示图的遍历与连通性 最小生成树最短路径 活动网络 第1页/共116页图的基本概念图的基本概念n n图定义图定义图定义图定义 图是由顶点集合图是由顶点集合图是由顶点集合图是由顶点集合(vertex)及顶点间的关系集合组成的一种数据结构及顶点间的关系集合组成的一种数据结构及顶点间的关系集合组成的一种数据结构及顶点间的关系集合组成的一种数据结构:GraphGraph(V V,E E)其中其中其中其中 V V=x x|x x 某个数据对象某个数据对象某个数据对象某个数据对象 是顶点的有穷非空集合;是顶点的有穷非空集合;是顶点的有穷非空集合;是顶点的有穷非空集合;E E=(=(x x,y y)|)|x x,y y V V 或或或或 E E=y|x x,y y V V&PathPath(x x,y y)是顶点之间关系的有穷集合,也叫做边是顶点之间关系的有穷集合,也叫做边是顶点之间关系的有穷集合,也叫做边是顶点之间关系的有穷集合,也叫做边(edge)edge)集合。集合。集合。集合。PathPath(x x,y y)表示从表示从表示从表示从 x x 到到到到 y y 的一的一的一的一条单向通路条单向通路条单向通路条单向通路,它是有方向的。它是有方向的。它是有方向的。它是有方向的。第2页/共116页图的基本概念图的基本概念n n有向图与无向图有向图与无向图有向图与无向图有向图与无向图 在有向图中,顶点对在有向图中,顶点对在有向图中,顶点对在有向图中,顶点对 x,y 是有序的。在无向图中,顶点对是有序的。在无向图中,顶点对是有序的。在无向图中,顶点对是有序的。在无向图中,顶点对(x,y)x,y)是无序的。是无序的。是无序的。是无序的。n n完全图完全图完全图完全图 若有若有若有若有 n n 个顶点的无向图有个顶点的无向图有个顶点的无向图有个顶点的无向图有 n n(n n-1)/2-1)/2 条边条边条边条边,则此图为完全无向图。有则此图为完全无向图。有则此图为完全无向图。有则此图为完全无向图。有 n n 个顶点的有向图有个顶点的有向图有个顶点的有向图有个顶点的有向图有n n(n-n-1)1)条边条边条边条边,则此图为完全有向图则此图为完全有向图则此图为完全有向图则此图为完全有向图00001111222265433 第3页/共116页图的基本概念图的基本概念图的基本概念图的基本概念n n邻接顶点邻接顶点邻接顶点邻接顶点 如果如果如果如果(u u,v v)是是是是 E E(G)(G)中的一条边,则称中的一条边,则称中的一条边,则称中的一条边,则称 u u 与与与与 v v 互为邻接顶点互为邻接顶点互为邻接顶点互为邻接顶点。n n子图子图子图子图 设有两个图设有两个图设有两个图设有两个图 GG(V V,E E)和和和和 GG(V V,E E)。若若若若 V V V V 且且且且 E E E E,则则则则称称称称 图图图图G G 是是是是 图图图图G G 的子图。的子图。的子图。的子图。n n权权权权 某些图的边具有与它相关的数某些图的边具有与它相关的数某些图的边具有与它相关的数某些图的边具有与它相关的数,称之为权。这种带权图叫做网络。称之为权。这种带权图叫做网络。称之为权。这种带权图叫做网络。称之为权。这种带权图叫做网络。0123子图子图0130123023第4页/共116页图的基本概念图的基本概念图的基本概念图的基本概念n n顶点的度顶点的度顶点的度顶点的度 一个顶点一个顶点一个顶点一个顶点v v的度是与它相关联的边的条数。记作的度是与它相关联的边的条数。记作的度是与它相关联的边的条数。记作的度是与它相关联的边的条数。记作TD(TD(v v)。在有向图中在有向图中在有向图中在有向图中,顶点顶点顶点顶点的度等于该顶点的入度与出度之和。的度等于该顶点的入度与出度之和。的度等于该顶点的入度与出度之和。的度等于该顶点的入度与出度之和。n n顶点顶点顶点顶点 v v 的入度是以的入度是以的入度是以的入度是以 v v 为终点的有向边的条数为终点的有向边的条数为终点的有向边的条数为终点的有向边的条数,记作记作记作记作 ID(ID(v v););顶点顶点顶点顶点 v v 的出度是以的出度是以的出度是以的出度是以 v v 为为为为始点的有向边的条数始点的有向边的条数始点的有向边的条数始点的有向边的条数,记作记作记作记作 OD(OD(v v)。n n路径路径路径路径 在图在图在图在图 GG(V V,E E)中中中中,若从顶点若从顶点若从顶点若从顶点 v vi i 出发出发出发出发,沿一些边经过一些顶点沿一些边经过一些顶点沿一些边经过一些顶点沿一些边经过一些顶点 v vp p1 1,v vp p2 2,v vpmpm,到达顶点到达顶点到达顶点到达顶点v vj j。则称顶点序列则称顶点序列则称顶点序列则称顶点序列(v vi i v vp p1 1 v vp p2 2.v vpm pm v vj j)为从顶点为从顶点为从顶点为从顶点v vi i 到顶点到顶点到顶点到顶点 v vj j 的路径。它经过的边的路径。它经过的边的路径。它经过的边的路径。它经过的边(v vi i,v vp p1 1)、(v vp p1 1,v vp p2 2)、.、(v vpmpm,v vj j)应是属于应是属于应是属于应是属于E E的边。的边。的边。的边。第5页/共116页图的基本概念图的基本概念n n路径长度路径长度路径长度路径长度 非带权图的路径长度是指此路径上边的条数。带权图的路径长度是指路径非带权图的路径长度是指此路径上边的条数。带权图的路径长度是指路径非带权图的路径长度是指此路径上边的条数。带权图的路径长度是指路径非带权图的路径长度是指此路径上边的条数。带权图的路径长度是指路径上各边的权之和。上各边的权之和。上各边的权之和。上各边的权之和。n n简单路径简单路径简单路径简单路径 若路径上各顶点若路径上各顶点若路径上各顶点若路径上各顶点 v v1 1,v v2 2,.,.,v vm m 均不均不均不均不 互相重复互相重复互相重复互相重复,则称这样的路径为简单则称这样的路径为简单则称这样的路径为简单则称这样的路径为简单路径。路径。路径。路径。n n回路回路回路回路 若路径上第一个顶点若路径上第一个顶点若路径上第一个顶点若路径上第一个顶点 v v1 1 与最后一个顶点与最后一个顶点与最后一个顶点与最后一个顶点v vm m 重合重合重合重合,则称这样的路径为回路则称这样的路径为回路则称这样的路径为回路则称这样的路径为回路或环。或环。或环。或环。012301230123第6页/共116页图的基本概念图的基本概念n n连通图与连通分量连通图与连通分量 在无向图中在无向图中,若从顶点若从顶点v1到顶点到顶点v2有路径有路径,则称顶点则称顶点v1与与v2是连通的。是连通的。如果图中任意一对顶点都是连通的如果图中任意一对顶点都是连通的,则称此图则称此图是是连通图连通图。非连通图的极大连通子图叫做。非连通图的极大连通子图叫做连通连通分量分量。n n强连通图与强连通分量强连通图与强连通分量 在在有向图有向图中中,若对若对于每一对顶点于每一对顶点vi和和vj,都存在一条从都存在一条从vi到到vj和从和从vj到到vi的路径的路径,则称此图是则称此图是强连通图强连通图。非强连通。非强连通图的极大强连通子图叫做图的极大强连通子图叫做强连通分量强连通分量。n n生成树生成树 一个连通图的生成树是其极小连通子一个连通图的生成树是其极小连通子图,在图,在n个顶点的情形下,有个顶点的情形下,有n-1条边。条边。第7页/共116页图的抽象数据类型图的抽象数据类型class Graph public:Graph();void InsertVertex(Type&vertex);void InsertEdge(int v1,int v2,int weight);void RemoveVertex(int v);void RemoveEdge(int v1,int v2);int IsEmpty();Type GetWeight(int v1,int v2);int GetFirstNeighbor(int v);int GetNextNeighbor(int v1,int v2);第8页/共116页图的存储表示图的存储表示邻接矩阵邻接矩阵邻接矩阵邻接矩阵(Adjacency Matrix)Adjacency Matrix)n n在图的邻接矩阵表示中,有一个记录各个顶点信在图的邻接矩阵表示中,有一个记录各个顶点信在图的邻接矩阵表示中,有一个记录各个顶点信在图的邻接矩阵表示中,有一个记录各个顶点信息的顶点表,还有一个表示各个顶点之间关系的息的顶点表,还有一个表示各个顶点之间关系的息的顶点表,还有一个表示各个顶点之间关系的息的顶点表,还有一个表示各个顶点之间关系的邻接矩阵。邻接矩阵。邻接矩阵。邻接矩阵。n n设图设图设图设图 A=(V,E)A=(V,E)是一个有是一个有是一个有是一个有 n n 个顶点的图个顶点的图个顶点的图个顶点的图,图的图的图的图的邻接矩阵是一个二维数组邻接矩阵是一个二维数组邻接矩阵是一个二维数组邻接矩阵是一个二维数组 A A.edgeedgen nn n,定义:定义:定义:定义:第9页/共116页 无向图的邻接矩阵是对称的无向图的邻接矩阵是对称的;有向图的邻接矩阵可能是不对称的。有向图的邻接矩阵可能是不对称的。第10页/共116页n n在有向图中在有向图中在有向图中在有向图中,统计第统计第统计第统计第 i i 行行行行 1 1 的个数可得顶点的个数可得顶点的个数可得顶点的个数可得顶点 i i 的的的的出度出度出度出度,统计第,统计第,统计第,统计第 j j 列列列列 1 1 的的的的个数可得顶点个数可得顶点个数可得顶点个数可得顶点 j j 的的的的入度入度入度入度。n n在无向图中在无向图中在无向图中在无向图中,统计第统计第统计第统计第 i i 行行行行(列列列列)1)1 的个数可得顶点的个数可得顶点的个数可得顶点的个数可得顶点i i 的的的的度度度度。第11页/共116页网络(带权图)的邻接矩阵网络(带权图)的邻接矩阵631295420318第12页/共116页邻接表邻接表(Adjacency List)n n无向图的邻接表无向图的邻接表同一个顶点发出的边链接在同一个边链表中,每一个链结点代表一条边同一个顶点发出的边链接在同一个边链表中,每一个链结点代表一条边同一个顶点发出的边链接在同一个边链表中,每一个链结点代表一条边同一个顶点发出的边链接在同一个边链表中,每一个链结点代表一条边(边结边结边结边结点点点点),),结点中有另一顶点的下标结点中有另一顶点的下标结点中有另一顶点的下标结点中有另一顶点的下标 dest dest 和指针和指针和指针和指针 linklink。ABCDdata adjABCD0123dest linkdest link 130210 第13页/共116页有向图的邻接表和逆邻接表有向图的邻接表和逆邻接表ABCdata adjABC012dest linkdest link 邻接表邻接表(出边表出边表)data adjABC012dest link逆邻接表逆邻接表(入边表入边表)102 011 第14页/共116页网络网络(带权图带权图)的邻接表的邻接表BACD9528data adjABCD0123dest cost link 1 53 62 83 21 9(出边表出边表)(顶点表顶点表)6第15页/共116页n n带权图的边结点中保存该边上的权值带权图的边结点中保存该边上的权值带权图的边结点中保存该边上的权值带权图的边结点中保存该边上的权值 costcost。n n顶点顶点顶点顶点 i i 的边链表的表头指针的边链表的表头指针的边链表的表头指针的边链表的表头指针 adjadj 在顶点表的下标在顶点表的下标在顶点表的下标在顶点表的下标为为为为 i i 的顶点记录中,该记录还保存了该顶点的的顶点记录中,该记录还保存了该顶点的的顶点记录中,该记录还保存了该顶点的的顶点记录中,该记录还保存了该顶点的datadata信息。信息。信息。信息。n n在邻接表的边链表中,各个边结点的链入顺序任意,在邻接表的边链表中,各个边结点的链入顺序任意,在邻接表的边链表中,各个边结点的链入顺序任意,在邻接表的边链表中,各个边结点的链入顺序任意,视边结点输入次序而定。视边结点输入次序而定。视边结点输入次序而定。视边结点输入次序而定。n n设图中有设图中有设图中有设图中有 n n 个顶点,个顶点,个顶点,个顶点,e e 条边,则用邻接表表示无条边,则用邻接表表示无条边,则用邻接表表示无条边,则用邻接表表示无向图时,需要向图时,需要向图时,需要向图时,需要 n n 个顶点结点,个顶点结点,个顶点结点,个顶点结点,2 2e e 个边结点个边结点个边结点个边结点(同一同一同一同一条边会出现两次条边会出现两次条边会出现两次条边会出现两次);用邻接表表示有向图时,若不用邻接表表示有向图时,若不用邻接表表示有向图时,若不用邻接表表示有向图时,若不考虑逆邻接表,只需考虑逆邻接表,只需考虑逆邻接表,只需考虑逆邻接表,只需 n n 个顶点结点,个顶点结点,个顶点结点,个顶点结点,e e 个边结点。个边结点。个边结点。个边结点。第16页/共116页邻接多重表邻接多重表(Adjacency Multilist)n n在邻接多重表中在邻接多重表中在邻接多重表中在邻接多重表中,每一条边只有一个边结点。为有关边的处理提供了方便。每一条边只有一个边结点。为有关边的处理提供了方便。每一条边只有一个边结点。为有关边的处理提供了方便。每一条边只有一个边结点。为有关边的处理提供了方便。n n无向图的情形无向图的情形无向图的情形无向图的情形uu边结点的结构边结点的结构 mark vertex1 vertex2 path1 path2其中其中,mark 是记录是否处理过的标记是记录是否处理过的标记;vertex1和和vertex2是该边两顶点位置。是该边两顶点位置。path1域是链接指域是链接指针针,指向下一条依附顶点指向下一条依附顶点vertex1的边;的边;path2 是是指向下一条依附顶点指向下一条依附顶点vertex2的边链接指针。的边链接指针。第17页/共116页需要时还可设置一个存放与该边相关的权值的域需要时还可设置一个存放与该边相关的权值的域需要时还可设置一个存放与该边相关的权值的域需要时还可设置一个存放与该边相关的权值的域 costcost。uu顶点结点的结构顶点结点的结构 存储顶点信息的结点表以顺序表方式组织存储顶点信息的结点表以顺序表方式组织,每一个顶点结点有两个数据成员:其中,每一个顶点结点有两个数据成员:其中,data 存放与该顶点相关的信息,存放与该顶点相关的信息,Firstout 是指示第一条依附该顶点的边的指针。在邻是指示第一条依附该顶点的边的指针。在邻接多重表中接多重表中,所有依附同一个顶点的边都所有依附同一个顶点的边都链接在同一个单链表中。链接在同一个单链表中。data Firstout第18页/共116页从顶点从顶点从顶点从顶点 i i 出发出发出发出发,可以循链找到所有依附于该可以循链找到所有依附于该可以循链找到所有依附于该可以循链找到所有依附于该顶点的边,也可以找到它的所有邻接顶点。顶点的边,也可以找到它的所有邻接顶点。顶点的边,也可以找到它的所有邻接顶点。顶点的边,也可以找到它的所有邻接顶点。第19页/共116页有向图的情形有向图的情形n n在用邻接表表示有向图时在用邻接表表示有向图时在用邻接表表示有向图时在用邻接表表示有向图时,有时需要同时使用邻接表和逆邻接表。用有向图的邻接有时需要同时使用邻接表和逆邻接表。用有向图的邻接有时需要同时使用邻接表和逆邻接表。用有向图的邻接有时需要同时使用邻接表和逆邻接表。用有向图的邻接多重表多重表多重表多重表(十字链表十字链表十字链表十字链表)可把两个表结合起来表示。可把两个表结合起来表示。可把两个表结合起来表示。可把两个表结合起来表示。uu边结点的结构边结点的结构其中,其中,mark是处理标记;是处理标记;vertex1和和vertex2指明该有向边始顶点和终顶点的指明该有向边始顶点和终顶点的位置。位置。mark vertex1 vertex2 path1 path2第20页/共116页path1path1是指向是指向是指向是指向始顶点与该边相同始顶点与该边相同始顶点与该边相同始顶点与该边相同的下一条边的指针;的下一条边的指针;的下一条边的指针;的下一条边的指针;path2path2是指向是指向是指向是指向终顶点与该边相同终顶点与该边相同终顶点与该边相同终顶点与该边相同的下一条边的指针。的下一条边的指针。的下一条边的指针。的下一条边的指针。需要时还可有权值域需要时还可有权值域需要时还可有权值域需要时还可有权值域costcost。uu顶点结点的结构顶点结点的结构 每个顶点有一个结点,它相当于出边表和入边每个顶点有一个结点,它相当于出边表和入边表的表头结点:其中,数据成员表的表头结点:其中,数据成员data存放与该顶存放与该顶点相关的信息,指针点相关的信息,指针Firstout 指示以该顶点为指示以该顶点为始顶点的出边表的第一条边,始顶点的出边表的第一条边,Firstin指示以该指示以该顶点为终顶点的入边表的第一条边。顶点为终顶点的入边表的第一条边。data Firstin Firstout第21页/共116页邻接多重表的结构邻接多重表的结构mark vtx1 vtx2 path1 path2 0 10 31 22 33 44 0e1e2e3e4e5e6data Fin FoutABCDE01234e1e2e3e4e5e6ABCDE第22页/共116页在有向图的十字链表中,从顶点结点的firstout指针域出发,沿边结点中的path1域的链一直走到底正好是原来的邻接表结构。统计链中边结点的个数可求得该顶点的出度。从顶点结点的firstin指针域出发,沿边结点中的path2域的链一直走到底正好是原来的逆邻接表结构。统计链中边结点的个数可求得该顶点的入度。第23页/共116页图的遍历与连通性图的遍历与连通性n n从已给的连通图中某一顶点出发,沿着一从已给的连通图中某一顶点出发,沿着一从已给的连通图中某一顶点出发,沿着一从已给的连通图中某一顶点出发,沿着一 些边访些边访些边访些边访遍图中所有的顶点,且使每个顶点仅被访问一次,遍图中所有的顶点,且使每个顶点仅被访问一次,遍图中所有的顶点,且使每个顶点仅被访问一次,遍图中所有的顶点,且使每个顶点仅被访问一次,就叫做图的遍历就叫做图的遍历就叫做图的遍历就叫做图的遍历(Graph Traversal)Graph Traversal)。n n图中可能存在回路,且图的任一顶点都可能与其图中可能存在回路,且图的任一顶点都可能与其图中可能存在回路,且图的任一顶点都可能与其图中可能存在回路,且图的任一顶点都可能与其它顶点相通,在访问完某个顶点之后可能会沿着它顶点相通,在访问完某个顶点之后可能会沿着它顶点相通,在访问完某个顶点之后可能会沿着它顶点相通,在访问完某个顶点之后可能会沿着某些边又回到了曾经访问过的顶点。某些边又回到了曾经访问过的顶点。某些边又回到了曾经访问过的顶点。某些边又回到了曾经访问过的顶点。n n为了避免重复访问,可设置一个标志顶点是否被为了避免重复访问,可设置一个标志顶点是否被为了避免重复访问,可设置一个标志顶点是否被为了避免重复访问,可设置一个标志顶点是否被访问过的辅助数组访问过的辅助数组访问过的辅助数组访问过的辅助数组 visitedvisited 。初始状态为初始状态为初始状态为初始状态为0 0,在遍历的过程中如果顶点在遍历的过程中如果顶点在遍历的过程中如果顶点在遍历的过程中如果顶点ViVi被访问,就立即让被访问,就立即让被访问,就立即让被访问,就立即让visitedVivisitedVi为为为为1 1,防止它被多次访问。,防止它被多次访问。,防止它被多次访问。,防止它被多次访问。第24页/共116页图的遍历的分类图的遍历的分类图的遍历的分类图的遍历的分类:uu深度优先搜索深度优先搜索 DFS(Depth First Search)uu广度优先搜索广度优先搜索 BFS(Breadth First Search)第25页/共116页深度优先搜索深度优先搜索DFS(Depth First Search)n nDFSDFS 在访问图中某一起始顶点在访问图中某一起始顶点在访问图中某一起始顶点在访问图中某一起始顶点 v v 后后后后,由由由由 v v 出发出发出发出发,访问它的访问它的访问它的访问它的任一邻接顶点任一邻接顶点任一邻接顶点任一邻接顶点 ww1 1;再从再从再从再从 ww1 1 出发出发出发出发,访问与访问与访问与访问与 ww1 1邻邻邻邻 接但还没有访接但还没有访接但还没有访接但还没有访问过的顶点问过的顶点问过的顶点问过的顶点 ww2 2;然后再从然后再从然后再从然后再从 ww2 2 出发出发出发出发,进行类似的访问进行类似的访问进行类似的访问进行类似的访问,如如如如此进行下去此进行下去此进行下去此进行下去,直至到达所有的邻接顶点都被访问过的顶点直至到达所有的邻接顶点都被访问过的顶点直至到达所有的邻接顶点都被访问过的顶点直至到达所有的邻接顶点都被访问过的顶点 u u 为止。接着为止。接着为止。接着为止。接着,退回一步退回一步退回一步退回一步,退到前一次刚访问过的顶点退到前一次刚访问过的顶点退到前一次刚访问过的顶点退到前一次刚访问过的顶点,看是看是看是看是否还有其它没有被访问的邻接顶点。如果有否还有其它没有被访问的邻接顶点。如果有否还有其它没有被访问的邻接顶点。如果有否还有其它没有被访问的邻接顶点。如果有,则访问此顶点则访问此顶点则访问此顶点则访问此顶点,之后再从此顶点出发之后再从此顶点出发之后再从此顶点出发之后再从此顶点出发,进行与前述类似的访问进行与前述类似的访问进行与前述类似的访问进行与前述类似的访问;如果没有如果没有如果没有如果没有,就就就就再退回一步进行搜索。重复上述过程再退回一步进行搜索。重复上述过程再退回一步进行搜索。重复上述过程再退回一步进行搜索。重复上述过程,直到连通图中所有顶点直到连通图中所有顶点直到连通图中所有顶点直到连通图中所有顶点都被访问过为止。都被访问过为止。都被访问过为止。都被访问过为止。第26页/共116页深度优先搜索深度优先搜索DFS(Depth First Search)深度优先搜索的示例深度优先搜索的示例ACDEGBFIHACDEGBFIH123456789123456789前进回退深度优先搜索过程深度优先搜索过程 深度优先生成树深度优先生成树第27页/共116页图的深度优先搜索算法图的深度优先搜索算法template void Graph :DFS()int*visited=new int NumVertices;for(int i=0;i NumVertices;i+)visited i=0;/访问数组 visited 初始化 DFS(0,visited);/从顶点0出发开始搜索 delete visited;/释放 visited 第28页/共116页图的深度优先搜索算法图的深度优先搜索算法template void Graph :DFS(const int v,int visited )cout GetValue(v);/访问顶点 v visitedv=1;/顶点 v 作访问标记 int w=GetFirstNeighbor(v);/取 v 的第一个邻接顶点 w while(w!=-1)/若邻接顶点 w 存在 if(!visitedw)DFS(w,visited);/若顶点 w 未访问过,递归访问顶点 w w=GetNextNeighbor(v,w);/取顶点 v 排在 w 后的下一个邻接顶点 第29页/共116页Avisited0=1w=1DFS(1,visited)w=3DFS(3,visited)w=-1Bvisited1=1w=0w=2DFS(2,visited)w=-1Cvisited2=1w=1w=-1Dvisited3=1w=0w=-1DFS(0,visited)ABCD0123第30页/共116页广度优先搜索广度优先搜索BFS(Breadth First Search)广度优先搜索的示例广度优先搜索的示例ACDEGBFIHACDEGBFH123456789123456789广度优先搜索过程广度优先搜索过程 广度优先生成树广度优先生成树I第31页/共116页广度优先搜索广度优先搜索BFS(Breadth First Search)n nBFSBFS在访问了起始顶点在访问了起始顶点在访问了起始顶点在访问了起始顶点 v v 之后之后之后之后,由由由由 v v 出发出发出发出发,依依依依次访问次访问次访问次访问 v v 的各个未被访问过的邻接顶点的各个未被访问过的邻接顶点的各个未被访问过的邻接顶点的各个未被访问过的邻接顶点 ww1 1,ww2 2,wwt t,然后再顺序访问然后再顺序访问然后再顺序访问然后再顺序访问 ww1 1,ww2 2,wwt t 的所有还的所有还的所有还的所有还未被访问过的邻接顶点。再从这些访问过的顶点出未被访问过的邻接顶点。再从这些访问过的顶点出未被访问过的邻接顶点。再从这些访问过的顶点出未被访问过的邻接顶点。再从这些访问过的顶点出发,再访问它们的所有还未被访问过的邻接顶点,发,再访问它们的所有还未被访问过的邻接顶点,发,再访问它们的所有还未被访问过的邻接顶点,发,再访问它们的所有还未被访问过的邻接顶点,如此做下去,直到图中所有顶点都被访问到为如此做下去,直到图中所有顶点都被访问到为如此做下去,直到图中所有顶点都被访问到为如此做下去,直到图中所有顶点都被访问到为止。止。止。止。n n广度优先搜索是一种分层的搜索过程广度优先搜索是一种分层的搜索过程广度优先搜索是一种分层的搜索过程广度优先搜索是一种分层的搜索过程,每向前走每向前走每向前走每向前走一步可能访问一批顶点一步可能访问一批顶点一步可能访问一批顶点一步可能访问一批顶点,不像深度优先搜索那样不像深度优先搜索那样不像深度优先搜索那样不像深度优先搜索那样有往回退的情况。因此有往回退的情况。因此有往回退的情况。因此有往回退的情况。因此,广度优先搜索不是一个广度优先搜索不是一个广度优先搜索不是一个广度优先搜索不是一个递归的过程。递归的过程。递归的过程。递归的过程。第32页/共116页广度优先搜索广度优先搜索BFS(Breadth First Search)n n为了实现逐层访问为了实现逐层访问为了实现逐层访问为了实现逐层访问,算法中使用了一个队列算法中使用了一个队列算法中使用了一个队列算法中使用了一个队列,以记忆正在访问的这一层和上一层的顶点以记忆正在访问的这一层和上一层的顶点以记忆正在访问的这一层和上一层的顶点以记忆正在访问的这一层和上一层的顶点,以便于向下一层访以便于向下一层访以便于向下一层访以便于向下一层访问。问。问。问。n n为避免重复访问为避免重复访问为避免重复访问为避免重复访问,需要一个辅助数组需要一个辅助数组需要一个辅助数组需要一个辅助数组 visited visited ,给被访问过的顶点加标记。给被访问过的顶点加标记。给被访问过的顶点加标记。给被访问过的顶点加标记。第33页/共116页template void Graph :BFS(int v)int*visited=new intNumVertices;for(int i=0;i NumVertices;i+)visitedi=0;/visited初始化 cout GetValue(v);visitedv=1;Queue q;q.EnQueue(v);/进队列 while(!q.IsEmpty()/队空搜索结束 v=q.DeQueue();int w=GetFirstNeighbor(v);while(w!=-1)/若邻接顶点 w 存在 if(!visitedw)/未访问过 cout GetValue(w);visitedw=1;q.EnQueue(w);w=GetNextNeighbor(v,w);/内层内层whilewhile循环循环重复检测 v v 的所有邻接顶点 /外层while循环,判队列空否 delete visited;第34页/共116页例子给出下图从顶点1出发进行深度优先搜索得到的深度优先生成树给出下图从顶点2出发进行广度优先搜索得到的广度优先生成树第35页/共116页第36页/共116页连通分量连通分量(Connected component)当无向图为非连通图时当无向图为非连通图时当无向图为非连通图时当无向图为非连通图时,从图中某一顶点出发从图中某一顶点出发从图中某一顶点出发从图中某一顶点出发,利用深度优先搜索算法或广度优先搜索算法利用深度优先搜索算法或广度优先搜索算法利用深度优先搜索算法或广度优先搜索算法利用深度优先搜索算法或广度优先搜索算法不可能不可能不可能不可能遍历到图中的所有顶点遍历到图中的所有顶点遍历到图中的所有顶点遍历到图中的所有顶点,只能访问到该顶点所在只能访问到该顶点所在只能访问到该顶点所在只能访问到该顶点所在的最大连通子图的最大连通子图的最大连通子图的最大连通子图(连通分量连通分量连通分量连通分量)的所有顶点的所有顶点的所有顶点的所有顶点。n n若从无向图的每一个连通分量中的一个顶点出发若从无向图的每一个连通分量中的一个顶点出发若从无向图的每一个连通分量中的一个顶点出发若从无向图的每一个连通分量中的一个顶点出发进行遍历进行遍历进行遍历进行遍历,可求得无向图的所有连通分量。可求得无向图的所有连通分量。可求得无向图的所有连通分量。可求得无向图的所有连通分量。n n在算法中在算法中在算法中在算法中,需要对图的每一个顶点进行检测:需要对图的每一个顶点进行检测:需要对图的每一个顶点进行检测:需要对图的每一个顶点进行检测:若已被访问过,则该顶点一定是落在图中已求得的若已被访问过,则该顶点一定是落在图中已求得的若已被访问过,则该顶点一定是落在图中已求得的若已被访问过,则该顶点一定是落在图中已求得的连通分量上;若还未被访问,则从该顶点出发遍历连通分量上;若还未被访问,则从该顶点出发遍历连通分量上;若还未被访问,则从该顶点出发遍历连通分量上;若还未被访问,则从该顶点出发遍历图,可求得图的另一个连通分量。图,可求得图的另一个连通分量。图,可求得图的另一个连通分量。图,可求得图的另一个连通分量。n n对于非连通的无向图,所有连通分量的生成树组对于非连通的无向图,所有连通分量的生成树组对于非连通的无向图,所有连通分量的生成树组对于非连通的无向图,所有连通分量的生成树组成了非连通图的生成森林成了非连通图的生成森林成了非连通图的生成森林成了非连通图的生成森林。第37页/共116页ACDEIBFOGHJNMLK非连通无向图AHKCDEIBFOGJNML非连通图的连通分量第38页/共116页ABCDEFGHIJKLMNO01234567891011121314432150065064154989787131211141014101012110ACDEBFGIHJONMLK非连通无向图的邻接表表示第39页/共116页确定连通分量的算法确定连通分量的算法template void Graph :Components()int*visited=new intNumVertices;for(int i=0;i NumVertices;i+)visitedi=0;/visited 初始化 for(i=0;i NumVertices;i+)if(!visitedi)/检测顶点是否访问过 DFS(i,visited);/未访问,出发访问 OutputNewComponent();/连通分量 delete visited;第40页/共116页最小生成树最小生成树(minimum cost spanning tree)n n使用不同的遍历图的方法,可以得到不同的生成树;从不同的顶点出发,也可能得到使用不同的遍历图的方法,可以得到不同的生成树;从不同的顶点出发,也可能得到使用不同的遍历图的方法,可以得到不同的生成树;从不同的顶点出发,也可能得到使用不同的遍历图的方法,可以得到不同的生成树;从不同的顶点出发,也可能得到不同的生成树。不同的生成树。不同的生成树。不同的生成树。n n按照生成树的定义,按照生成树的定义,按照生成树的定义,按照生成树的定义,n n 个顶点的连通网络的生成树有个顶点的连通网络的生成树有个顶点的连通网络的生成树有个顶点的连通网络的生成树有 n n 个顶点、个顶点、个顶点、个顶点、n n-1 1 条边。条边。条边。条边。n n构造最小生成树的准则构造最小生成树的准则构造最小生成树的准则构造最小生成树的准则n n必须使用且仅使用该网络中的必须使用且仅使用该网络中的n-1 条边来条边来联结网络中的联结网络中的 n 个顶点;个顶点;n n不能使用产生回路的边;不能使用产生回路的边;n n各边上的权值的总和达到最小。各边上的权值的总和达到最小。第41页/共116页克鲁斯卡尔克鲁斯卡尔(Kruskal)算法算法n n克鲁斯卡尔算法的基本思想:克鲁斯卡尔算法的基本思想:克鲁斯卡尔算法的基本思想:克鲁斯卡尔算法的基本思想:设有一个有设有一个有设有一个有设有一个有 n n 个顶点的连通网络个顶点的连通网络个顶点的连通网络个顶点的连通网络 NN=V V,E E,最初先构造一个只有最初先构造一个只有最初先构造一个只有最初先构造一个只有 n n 个顶点个顶点个顶点个顶点,没有边的非连通图没有边的非连通图没有边的非连通图没有边的非连通图 T T=V V,图中每个顶点自成一个连通分量。当在图中每个顶点自成一个连通分量。当在图中每个顶点自成一个连通分量。当在图中每个顶点自成一个连通分量。当在 E E 中选到中选到中选到中选到一条具有最小权值的边时一条具有最小权值的边时一条具有最小权值的边时一条具有最小权值的边时,若该边的两个顶点落在不同的连通分量上,则将此边加入若该边的两个顶点落在不同的连通分量上,则将此边加入若该边的两个顶点落在不同的连通分量上,则将此边加入若该边的两个顶点落在不同的连通分量上,则将此边加入到到到到 T T 中中中中;否则将此边舍去,重新选择一条权值最小的边。如此重复下去否则将此边舍去,重新选择一条权值最小的边。如此重复下去否则将此边舍去,重新选择一条权值最小的边。如此重复下去否则将此边舍去,重新选择一条权值最小的边。如此重复下去,直到所有直到所有直到所有直到所有顶点在同一个连通分量上为止顶点在同一个连通分量上为止顶点在同一个连通分量上为止顶点在同一个连通分量上为止第42页/共116页应用克鲁斯卡尔算法构造最小生成树的过程应用克鲁斯卡尔算法构造最小生成树的过程10504613228102514242216181250461325046132原图 (a)(b)第43页/共116页1012504613228102514242216181250461325046132101412原图 (c)(d)504613210141612(e)(f)(g)504613210142216125046121025142216123第44页/共116页克鲁斯卡尔克鲁斯卡尔(Kruskal)算法算法n n算法的框架算法的框架算法的框架算法的框架利用最小堆利用最小堆利用最小堆利用最小堆(MinHeap)MinHeap)和并查集和并查集和并查集和并查集(DisjointSets)DisjointSets)来实现克鲁斯卡尔算法。来实现克鲁斯卡尔算法。来实现克鲁斯卡尔算法。来实现克鲁斯卡尔算法。n n首先首先首先首先,利用最小堆来存放利用最小堆来存放利用最

    注意事项

    本文(数据结构图总结.pptx)为本站会员(莉***)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开