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

    数据结构-第七章-图幻灯片.ppt

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

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

    数据结构-第七章-图幻灯片.ppt

    数据结构-第七章-图第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 的一条弧,且称的一条弧,且称x为弧尾,为弧尾,y为弧头,这样的为弧头,这样的图称为有向图。图称为有向图。第2页,共101页,编辑于2022年,星期六n有向图与无向图有向图与无向图 在有向图中,顶点对在有向图中,顶点对 是有序的。在无向图中,顶点对是有序的。在无向图中,顶点对(x,y)是无是无序的。序的。n完全图完全图 若有若有 n 个顶点的无向图有个顶点的无向图有 n(n-1)/2 条边条边,则则此图为此图为无向完全图无向完全图。有。有 n 个顶点的有向图有个顶点的有向图有n(n-1)条边条边,则此图为则此图为有向完全图有向完全图。00001111222265433第3页,共101页,编辑于2022年,星期六 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)。在有向图中。在有向图中,顶点顶点的度等于该顶点的入度与出度之和。的度等于该顶点的入度与出度之和。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)应是属于应是属于E的边。的边。第5页,共101页,编辑于2022年,星期六顶点的出度顶点的出度:以顶点以顶点v 为为弧尾的弧的数目弧尾的弧的数目;顶点的入度顶点的入度:以顶点以顶点v v为弧为弧头的弧的数目。头的弧的数目。ABECF有向图有向图顶点的度顶点的度(TD)=)=出度出度(OD)+)+入度入度(ID)TD(B)=OD(B)+ID(B)=3例如例如:第6页,共101页,编辑于2022年,星期六n路径长度路径长度 非带权图的路径长度是指此路径上边的非带权图的路径长度是指此路径上边的条数。带权图的路径长度是指路径上各边的权之和。条数。带权图的路径长度是指路径上各边的权之和。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连通图与连通分量连通图与连通分量 在无向图中在无向图中,若从顶若从顶点点v1到顶点到顶点v2有路径有路径,则称顶点则称顶点v1与与v2是连是连通的。如果图中任意一对顶点都是连通的通的。如果图中任意一对顶点都是连通的,则称此图是连通图。非连通图的极大连通则称此图是连通图。非连通图的极大连通子图叫做连通分量。子图叫做连通分量。n强连通图与强连通分量强连通图与强连通分量 在有向图中在有向图中,若若对于每一对顶点对于每一对顶点vi和和vj,都存在一条从都存在一条从vi到到vj和从和从vj到到vi的路径的路径,则称此图是强连通图。则称此图是强连通图。非强连通图的极大强连通子图叫做强连通非强连通图的极大强连通子图叫做强连通分量。分量。第9页,共101页,编辑于2022年,星期六无向图无向图,若图中任意两个若图中任意两个顶点之间都有路径相通,顶点之间都有路径相通,则称此图为则称此图为连通图连通图;若无向图为非连通图,则若无向图为非连通图,则图中各个极大连通子图称图中各个极大连通子图称作此图的作此图的连通分量连通分量。BACDFEBACDFE第10页,共101页,编辑于2022年,星期六有向图有向图,若任意两个顶点之间都存在一条有向路径,若任意两个顶点之间都存在一条有向路径,则称此有向图为则称此有向图为强连通图强连通图。否则,其各个强连通子图称作它的否则,其各个强连通子图称作它的强连通分量强连通分量。ABECFABECF第11页,共101页,编辑于2022年,星期六n强连通图与强连通分量 在有向图中,若对于每一对顶点vi和vj,都存在一条从vi到vj和从vj到vi的路径,则称此图是强连通图。非强连通图的极大强连通子图叫做强连通分量。0 134 2 5 0 134 2 5第12页,共101页,编辑于2022年,星期六生成树生成树:假设一个连通图有假设一个连通图有n个顶点和个顶点和e 条边,其条边,其中中n-1条边和条边和n个顶点构成一个极小连通子图,称该个顶点构成一个极小连通子图,称该极小连通子图为此连通图的极小连通子图为此连通图的生成树生成树。在极小连通子极小连通子图中增加一条边,则一定有环。图中增加一条边,则一定有环。在极小连通子图中去掉一条边,则成为非连通图。极小连通子图中去掉一条边,则成为非连通图。BACDFEBACDFE第13页,共101页,编辑于2022年,星期六有有n个顶点,个顶点,n-1条边的图必定是生成树吗?条边的图必定是生成树吗?对非连通图,则称由各个连通分量的生成对非连通图,则称由各个连通分量的生成树的集合为此非连通图的树的集合为此非连通图的生成森林生成森林。BACDFEBACDFE第14页,共101页,编辑于2022年,星期六图的存储结构图的存储结构n在图的邻接矩阵表示中,有一个记录各个在图的邻接矩阵表示中,有一个记录各个顶点信息的顶点表,还有一个表示各个顶顶点信息的顶点表,还有一个表示各个顶点之间关系的邻接矩阵。点之间关系的邻接矩阵。n设图设图 A=(V,E)是一个有是一个有 n 个顶点的图个顶点的图,图图的邻接矩阵是一个二维数组的邻接矩阵是一个二维数组 A.edgenn,定义:定义:邻接矩阵邻接矩阵(Adjacency Matrix)第15页,共101页,编辑于2022年,星期六n无向图的邻接矩阵是对称的无向图的邻接矩阵是对称的;n有向图的邻接矩阵可能是不对称的。有向图的邻接矩阵可能是不对称的。0123012第16页,共101页,编辑于2022年,星期六n在有向图中在有向图中,统计第统计第 i 行行 1 的个数可得顶点的个数可得顶点 i 的出度,统计第的出度,统计第 j 列列 1 的个数可得顶点的个数可得顶点 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;/边上权值类型边上权值类型typedef struct VertexData vexListNumVertices;/顶点表顶点表 EdgeData EdgeNumVerticesNumVertices;/邻接矩阵邻接矩阵,可视为边之间的关系可视为边之间的关系 int n,e;/图中当前的顶点个数与边数图中当前的顶点个数与边数 MTGraph;用邻接矩阵表示的结构定义用邻接矩阵表示的结构定义第19页,共101页,编辑于2022年,星期六邻接表邻接表(Adjacency List)邻接表邻接表:是图的一种链式存储结构。是图的一种链式存储结构。弧的结点结构弧的结点结构adjvex;/该弧所指向的顶点的位置该弧所指向的顶点的位置nextarc;/指向下一条弧指针指向下一条弧指针 info;/该弧相关信息的指针该弧相关信息的指针adjvex nextarc info顶点的结点结构顶点的结点结构 data firstarc data;/顶点信息顶点信息firstarc;/指向第一条依附该顶点的弧指向第一条依附该顶点的弧第20页,共101页,编辑于2022年,星期六无向图的邻接表无向图的邻接表 同一个顶点发出的边链接在同一个边链表同一个顶点发出的边链接在同一个边链表中,每一个链结点代表一条边中,每一个链结点代表一条边(边结点边结点),结点中有另一顶点的下标结点中有另一顶点的下标 dest 和指针和指针 link。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(出边表出边表)(顶点表顶点表)第23页,共101页,编辑于2022年,星期六n带权图的边结点中保存该边上的权值带权图的边结点中保存该边上的权值 cost。n顶点顶点 i 的边链表的表头指针的边链表的表头指针 adj 在顶点表的在顶点表的下标为下标为 i 的顶点记录中,该记录还保存了该的顶点记录中,该记录还保存了该顶点的其它信息。顶点的其它信息。n在邻接表的边链表中,各个边结点的链入顺在邻接表的边链表中,各个边结点的链入顺序任意,视边结点输入次序而定。序任意,视边结点输入次序而定。n设图中有设图中有 n 个顶点,个顶点,e 条边,则用邻接表表条边,则用邻接表表示无向图时,需要示无向图时,需要 n 个顶点结点,个顶点结点,2e 个边个边结点;用邻接表表示有向图时,若不考虑逆结点;用邻接表表示有向图时,若不考虑逆邻接表,只需邻接表,只需 n 个顶点结点,个顶点结点,e 个边结点。个边结点。第24页,共101页,编辑于2022年,星期六typedef char VertexData;/顶点数据类型顶点数据类型typedef int EdgeData;/边上权值类型边上权值类型typedef struct node /边结点边结点 int dest;/目标顶点下标目标顶点下标 EdgeData cost;/边上的权值边上的权值 Struct node*link;/下一边链接指针下一边链接指针 EdgeNode;邻接表表示的网的定义邻接表表示的网的定义第27页,共101页,编辑于2022年,星期六typedef struct /顶点结点顶点结点 VertexData data;/顶点数据域顶点数据域 EdgeNode*firstAdj;/边链表头指针边链表头指针 VertexNode;typedef struct /图的邻接表图的邻接表 VertexNode VexList NumVertices;/邻接表邻接表 int n,e;/图中当前的顶点个数与边数图中当前的顶点个数与边数 AdjGraph;第28页,共101页,编辑于2022年,星期六邻接表的构造算法邻接表的构造算法(无向图无向图)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页,编辑于2022年,星期六 /链入第链入第 tail 号链表的前端号链表的前端 p-link=G.VexListtail.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页,编辑于2022年,星期六图的遍历图的遍历n从图中某一顶点出发访遍图中所有的顶点,从图中某一顶点出发访遍图中所有的顶点,且使每个顶点仅被访问一次,这一过程就叫且使每个顶点仅被访问一次,这一过程就叫做图的遍历做图的遍历(Traversing Graph)。n图中可能存在回路,且图的任一顶点都可能图中可能存在回路,且图的任一顶点都可能与其它顶点相通,在访问完某个顶点之后可与其它顶点相通,在访问完某个顶点之后可能会沿着某些边又回到了曾经访问过的顶点。能会沿着某些边又回到了曾经访问过的顶点。n为了避免重复访问,可设置一个标志顶点是为了避免重复访问,可设置一个标志顶点是否被访问过的辅助数组否被访问过的辅助数组 visited 。第31页,共101页,编辑于2022年,星期六n辅助数组辅助数组 visited 的初始状态为的初始状态为 0,在图在图的遍历过程中的遍历过程中,一旦某一个顶点一旦某一个顶点 i 被访问被访问,就立即让就立即让 visited i 为为 1,防止它被多次访防止它被多次访问。问。n两种图的遍历方法两种图的遍历方法: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 出出发发,访问它的任一邻接顶点访问它的任一邻接顶点 w1;再从再从 w1 出发出发,访问与访问与 w1邻邻 接但还没有访问过的顶点接但还没有访问过的顶点 w2;然后再从然后再从 w2 出发出发,进行类似的访问进行类似的访问,如此如此进行下去进行下去,直至到达所有的邻接顶点都被访直至到达所有的邻接顶点都被访问过的顶点问过的顶点 u 为止。接着为止。接着,退回一步退回一步,退到退到前一次刚访问过的顶点前一次刚访问过的顶点,看是否还有其它没看是否还有其它没有被访问的邻接顶点。如果有有被访问的邻接顶点。如果有,则访问此顶则访问此顶点点,之后再从此顶点出发之后再从此顶点出发,进行与前述类似进行与前述类似的访问的访问;如果没有如果没有,就再退回一步进行搜索。就再退回一步进行搜索。重复上述过程重复上述过程,直到连通图中所有顶点都被直到连通图中所有顶点都被访问过为止。访问过为止。第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 出发开始搜索出发开始搜索 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 未访问过未访问过,递归访问顶点递归访问顶点 w w=GetNextNeighbor(G,v,w);/取顶点取顶点 v 排在排在 w 后的下一个邻接顶点后的下一个邻接顶点 第36页,共101页,编辑于2022年,星期六广度优先搜索广度优先搜索BFS(Breadth First Search)n广度优先搜索过程广度优先搜索过程ACDEGBFIHACDEGBFH123456789123456789广度优先生成树广度优先生成树I第37页,共101页,编辑于2022年,星期六nBFS在访问了起始顶点在访问了起始顶点 v 之后之后,由由 v 出发出发,依依次访问次访问 v 的各个未被访问过的邻接顶点的各个未被访问过的邻接顶点 w1,w2,wt,然后再顺序访问然后再顺序访问 w1,w2,wt 的所有还未被访问过的邻接顶点。再从这些的所有还未被访问过的邻接顶点。再从这些访问过的顶点出发,再访问它们的所有还未访问过的顶点出发,再访问它们的所有还未被访问过的邻接顶点,被访问过的邻接顶点,如此做下去,直到如此做下去,直到图中所有顶点都被访问到为止。图中所有顶点都被访问到为止。n广度优先搜索是一种分层的搜索过程广度优先搜索是一种分层的搜索过程,每向每向前走一步可能访问一批顶点前走一步可能访问一批顶点,不像深度优先不像深度优先搜索那样有往回退的情况。因此搜索那样有往回退的情况。因此,广度优先广度优先搜索不是一个递归的过程。搜索不是一个递归的过程。第38页,共101页,编辑于2022年,星期六n为了实现逐层访问为了实现逐层访问,算法中使用了一个队列算法中使用了一个队列,以记忆正在访问的这一层和下一层的顶点以记忆正在访问的这一层和下一层的顶点,以便于向下一层访问。以便于向下一层访问。n为避免重复访问为避免重复访问,需要一个辅助数组需要一个辅助数组 visited ,给被访问过的顶点加标记。,给被访问过的顶点加标记。图的广度优先搜索算法图的广度优先搜索算法void Graph_Traverse(AdjGraph G)for(int i=0;i G.n;i+)if(!visitedi)BFS(G,i,visited);第39页,共101页,编辑于2022年,星期六void BFS(AdjGraph G,int v,int visited )cout GetValue(v);visitedv=1;Queue q;InitQueue(&q);EnQueue(&q,v);/进队列进队列 while(!QueueEmpty(&q)/队空搜索结束队空搜索结束 DeQueue(&q,v);int w=GetFirstNeighbor(G,v);while(w!=-1)/若邻接顶点若邻接顶点 w 存在存在 if(!visitedw)/未访问过未访问过 cout GetValue(w);第40页,共101页,编辑于2022年,星期六 visitedw=1;EnQueue(&q,w);w=GetNextNeighbor(G,v,w);/重复检测重复检测 v 的所有邻接顶点的所有邻接顶点 /外层循环,判队列空否外层循环,判队列空否 delete visited;第41页,共101页,编辑于2022年,星期六 连通分量连通分量(Connected component)当无向图为非连通图时当无向图为非连通图时,从图中某一顶点出发从图中某一顶点出发,利用深度优先搜索算法或广度优先搜索算法不利用深度优先搜索算法或广度优先搜索算法不可能遍历到图中的所有顶点可能遍历到图中的所有顶点,只能访问到该顶只能访问到该顶点所在的最大连通子图点所在的最大连通子图(连通分量连通分量)的所有顶点。的所有顶点。若从无向图的每一个连通分量中的一个顶点若从无向图的每一个连通分量中的一个顶点出发进行遍历出发进行遍历,可求得无向图的所有连通分可求得无向图的所有连通分量。量。图的连通性问题图的连通性问题第42页,共101页,编辑于2022年,星期六n求连通分量的算法需要对图的每一个顶点求连通分量的算法需要对图的每一个顶点进行检测:若已被访问过,则该顶点一定进行检测:若已被访问过,则该顶点一定是落在图中已求得的连通分量上;若还未是落在图中已求得的连通分量上;若还未被访问,则从该顶点出发遍历图,可求得被访问,则从该顶点出发遍历图,可求得图的另一个连通分量。图的另一个连通分量。n对于非连通的无向图,所有连通分量的生对于非连通的无向图,所有连通分量的生成树组成了非连通图的生成森林。成树组成了非连通图的生成森林。第43页,共101页,编辑于2022年,星期六ACDEIBFOGHJNMLK非连通无向图的三个连通分量非连通无向图的三个连通分量AHKCDEIBFOGJNML非连通图的连通分量的极小连通子图非连通图的连通分量的极小连通子图第44页,共101页,编辑于2022年,星期六重连通分量重连通分量(Biconnected Component)n在无向连通图在无向连通图G中中,当且仅当删去当且仅当删去G中的顶中的顶点点v及所有依附于及所有依附于v的所有边后的所有边后,可将图分割可将图分割成两个或两个以上的连通分量,则称顶点成两个或两个以上的连通分量,则称顶点v为关节点。为关节点。n没有关节点的连通图叫做重连通图。没有关节点的连通图叫做重连通图。n在重连通图上在重连通图上,任何一对顶点之间至少存在任何一对顶点之间至少存在有两条路径有两条路径,在删去某个顶点及与该顶点相在删去某个顶点及与该顶点相关联的边时关联的边时,也不破坏图的连通性。也不破坏图的连通性。n一个连通图一个连通图G如果不是重连通图,那么它可如果不是重连通图,那么它可以包括几个重连通分量。以包括几个重连通分量。第45页,共101页,编辑于2022年,星期六n在一个无向连通图在一个无向连通图G中中,重连通分量可以利重连通分量可以利用深度优先生成树找到。用深度优先生成树找到。n在图中各顶点旁标明的深度优先数在图中各顶点旁标明的深度优先数,给出进给出进行深度优先搜索时各顶点访问的次序。行深度优先搜索时各顶点访问的次序。n深度优先生成树的根是关节点的充要条件是深度优先生成树的根是关节点的充要条件是它至少有两个子女。它至少有两个子女。n其它顶点其它顶点 u 是关节点的充要条件是它至少有是关节点的充要条件是它至少有一个子女一个子女 w,从从 w 出发出发,不能通过不能通过 w、w 的的子孙及一条回边所组成的路径到达子孙及一条回边所组成的路径到达 u 的祖先。的祖先。第46页,共101页,编辑于2022年,星期六ABCDEFGHIJABCDEFGHJABCDEFGHJII12345678910根有两根有两 个子女个子女关关节节点点关关节节点点关节点关节点第47页,共101页,编辑于2022年,星期六ABCDEFGHIJABHIDFBCDEFGH连通图和它的连通分量连通图和它的连通分量第48页,共101页,编辑于2022年,星期六最小生成树最小生成树(minimum cost spanning tree)n使用不同的遍历图的方法,可以得到不同使用不同的遍历图的方法,可以得到不同的生成树;从不同的顶点出发,也可能得的生成树;从不同的顶点出发,也可能得到不同的生成树。到不同的生成树。n按照生成树的定义,按照生成树的定义,n 个顶点的连通网络个顶点的连通网络的生成树有的生成树有 n 个顶点、个顶点、n-1 条边。条边。n构造最小生成树的准则构造最小生成树的准则n必须使用且仅使用该网络中的必须使用且仅使用该网络中的n-1 条边来联条边来联结网络中的结网络中的 n 个顶点;个顶点;n不能使用产生回路的边;不能使用产生回路的边;n各边上的权值的总和达到最小。各边上的权值的总和达到最小。第49页,共101页,编辑于2022年,星期六普里姆普里姆(Prim)算法算法n普里姆算法的普里姆算法的基本思想基本思想:从连通网络从连通网络 N=V,E 中的某一顶点中的某一顶点 u0 出出发发,选择与它关联的具有最小权值的边选择与它关联的具有最小权值的边(u0,v),将其顶点加入到生成树顶点集合将其顶点加入到生成树顶点集合U中。中。以后每一步从一个顶点在以后每一步从一个顶点在 U 中中,而另一个而另一个顶点不在顶点不在 U 中的各条边中选择权值最小的中的各条边中选择权值最小的边边(u,v),把它的顶点加入到集合把它的顶点加入到集合 U 中。如中。如此继续下去此继续下去,直到网络中的所有顶点都加入直到网络中的所有顶点都加入到生成树顶点集合到生成树顶点集合 U 中为止。中为止。n采用邻接矩阵作为图的存储表示。采用邻接矩阵作为图的存储表示。第50页,共101页,编辑于2022年,星期六252510504613228102514242216185046132504613210原图 (a)(b)504613210(c)(d)(e)(f)50461321022125046121025142216123252212第51页,共101页,编辑于2022年,星期六n在构造过程中,还设置了两个辅助数组:在构造过程中,还设置了两个辅助数组:u lowcost 存存放放生生成成树树顶顶点点集集合合内内顶顶点点到到生生成树外各顶点的各边上的当前最小权值;成树外各顶点的各边上的当前最小权值;u nearvex 记记录录生生成成树树顶顶点点集集合合外外各各顶顶点点距距离集合内哪个顶点最近离集合内哪个顶点最近(即权值最小即权值最小)。n例子例子5046132281025142422161812第52页,共101页,编辑于2022年,星期六n若选择从顶点若选择从顶点0出发,即出发,即u0=0,则两个辅助,则两个辅助数组的初始状态为:数组的初始状态为:n然后反复做以下工作:然后反复做以下工作:u 在在 lowcost 中选择中选择 nearvexi -1&lowcosti最小的边最小的边,用用 v 标记它。则选中的标记它。则选中的权值最小的边为权值最小的边为(nearvexv,v),相应的权值相应的权值为为 lowcostv。0 28 10 -1 0 0 0 0 0 0 lowcostnearvex0 1 2 3 4 5 6第53页,共101页,编辑于2022年,星期六u将将 nearvexv 改为改为-1,表示它已加入生表示它已加入生成树顶点集合。成树顶点集合。u将边将边(nearvexv,v,lowcostv)加入加入生成树的边集合。生成树的边集合。u取取 lowcosti=min lowcosti,Edgevi,即用生成树顶点集合外各,即用生成树顶点集合外各顶点顶点 i 到刚加入该集合的新顶点到刚加入该集合的新顶点 v 的距的距离离 Edgevi 与原来它们到生成树顶点与原来它们到生成树顶点集合中顶点的最短距离集合中顶点的最短距离lowcosti 做比较做比较,取距离近的作为这些集合外顶点到生成取距离近的作为这些集合外顶点到生成树顶点集合内顶点的最短距离。树顶点集合内顶点的最短距离。第54页,共101页,编辑于2022年,星期六uu 如果生成树顶点集合外顶点如果生成树顶点集合外顶点 i 到刚加入该集到刚加入该集合的新顶点合的新顶点 v 的距离比原来它到生成树顶点的距离比原来它到生成树顶点集合中顶点的最短距离还要近,则修改集合中顶点的最短距离还要近,则修改nearvexi:nearvexi=v。表示生成树外顶。表示生成树外顶点点i到生成树内顶点到生成树内顶点v当前距离最近。当前距离最近。0 28 10 -1 0 0 0 0 0 0 lowcostnearvex0 1 2 3 4 5 6选选 v=5选边选边(0,5)第55页,共101页,编辑于2022年,星期六顶点顶点v=5加入生成树顶点集合:加入生成树顶点集合:0 28 25 10 -1 0 0 0 5 -1 0 lowcostnearvex0 1 2 3 4 5 6选选 v=4选边选边(5,4)50461322810251424221618原图 边(0,5,10)加入生成树1204613210255第56页,共101页,编辑于2022年,星期六0 1 2 3 4 5 6顶点顶点v=4加入生成树顶点集合:加入生成树顶点集合:0 28 22 25 10 24-1 0 0 4 -1 -1 4 lowcostnearvex选选 v=3选边选边(4,3)50461322810251424221618原图 边(5,4,25)加入生成树125046132102522第57页,共101页,编辑于2022年,星期六顶点顶点v=3加入生成树顶点集合:加入生成树顶点集合:0 28 12 22 25 10 18-1 0 3 -1 -1 -1 3 lowcostnearvex0 1 2 3 4 5 6选选 v=2选边选边(3,2)50461322810251424221618原图 边(4,3,22)加入生成树12504613210252212第58页,共101页,编辑于2022年,星期六lowcostnearvex0 1 2 3 4 5 6顶点顶点v=2加入生成树顶点集合:加入生成树顶点集合:0 16 12 22 25 10 18-1 2 -1 -1 -1 -1 3 选选 v=1选边选边(2,1)50461322810251424221618原图 边(3,2,12)加入生成树125041321025221612第59页,共101页,编辑于2022年,星期六顶点顶点v=1加入生成树顶点集合:加入生成树顶点集合:0 16 12 22 25 10 14-1-1 -1 -1 -1 -1 1 lowcostnearvex0 1 2 3 4 5 6选选 v=6选边选边(1,6)50461322810251424221618原图 边(2,1,16)加入生成树125046132102514221612第60页,共101页,编辑于2022年,星期六lowcostnearvex0 1 2 3 4 5 6顶点顶点v=6加入生成树顶点集合:加入生成树顶点集合:0 16 12 22 25 10 14-1-1 -1 -1 -1 -1 -1 50461322810251424221618原图 边(1,6,14)加入生成树125046132102514221612第61页,共101页,编辑于2022年,星期六最后生成树中边集合里存入得各条边为:最后生成树中边集合里存入得各条边为:(0,5,10),(5,4,25),(4,3,22),(3,2,12),(2,1,16),(1,6,14)利用普里姆算法建立最小生成树利用普里姆算法建立最小生成树void Prim(Graph G,MST&T,int u)float*lowcost=new floatNumVertices;int*nearvex=new intNumVertices;for(int i=0;i NumVertices;i+)lowcosti=G.Edgeui;/Vu到各点代价到各点代价 nearvexi=u;/及最短带权路径及最短带权路径 第62页,共101页,编辑于2022年,星期六 nearvexu=-1;/加到生成树顶点集合加到生成树顶点集合 int k=0;/存放最小生成树结点的变量存放最小生成树结点的变量 for(i=0;i G.n;i+)if(i!=u)/循环循环n-1次次,加入加入n-1条边条边 EdgeData min=MaxValue;int v=0;for(int j=0;j NumVertices;j+)if(nearvexj!=-1&/=-1不参选不参选 lowcostj min)v=j;min=lowcostj;/求生成树外顶点到生成树内顶点具有最求生成树外顶点到生成树内顶点具有最 /小权值的边小权值的边,v是当前具最小权值的边是当前具最小权值的边 第63页,共101页,编辑于2022年,星期六 if(v)/v=0表示再也找不到要求顶点表示再也找不到要求顶点 Tk.tail=nearvexv;/选边加入生成树选边加入生成树 Tk.head=v;Tk+.cost=lowcostv;nearvexv=-1;/该边加入生成树标记该边加入生成树标记 for(j=0;j G.n;j+)if(nearvexj!=-1&G.Edgevj lowcostj)lowcostj=G.Edgevj;/修改修改 nearvexj=v;第64页,共101页,编辑于2022年,星期六 /循环循环n-1次次,加入加入n-1条边条边分析以上算法分析以上算法,设连通网络有设连通网络有 n 个顶点个顶点,则则该算法的时间复杂度为该算法的时间复杂度为 O(n2),它适用于边它适用于边稠密的网络。稠密的网络。注意:当各边有相同权值时,由于选择的随注意:当各边有相同权值时,由于选择的随意性,产生的生成树可能不唯一。当各边的意性,产生的生成树可能不唯一。当各边的权值不相同时,产生的生成树是唯一的。权值不相同时,产生的生成树是唯一的。第65页,共101页,编辑于2022年,星期六活动网络活动网络(Activity Network)n计划、施工过程、生产流程、程序流程等都计划、施工过程、生产流程、程序流程等都是是“工程工程”。除了很小的工程外,一般都把。除了很小的工程外,一般都把工程分为若干个叫做工程分为若干个叫做“活动活动”的子工程。完的子工程。完成了这些活动,这个工程就可以完成了。成了这些活动,这个工程就可以完成了。n例如,计算机专业学生的学习就是一个工程,例如,计算机专业学生的学习就是一个工程,每一门课程的学习就是整个工程的一些活动。每一门课程的学习就是整个工程的一些活动。其中有些课程要求先修课程,有些则不要求。其中有些课程要求先修课程,有些则不要求。这样在有的课程之间有领先关系,有的课程这样在有的课程之间有领先关系,有的课程可以并行地学习。可以并行地学习。用顶点表示活动的网络用顶点表示活动的网络(AOV网络网络)第66页,共101页,编辑于2022年,星期六 C1 高等数学高等数学 C2 程序设计基础程序设计基础 C3 离散数学离散数

    注意事项

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

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




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

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

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

    收起
    展开