(全国百强校)高中信息奥赛夏令营数据结构复习课件:图的算法(共41张).ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《(全国百强校)高中信息奥赛夏令营数据结构复习课件:图的算法(共41张).ppt》由用户(晟晟文业)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 全国百强校 全国 百强校 高中 信息 夏令营 数据结构 复习 课件 算法 41
- 资源描述:
-
1、数 据 结 构山东师大附中 赵宗昌u图的存储方式:邻接矩阵,,边表u最短路径算法:FloyedDijkstraBellman-Ford图的算法3 3 邻接矩阵是表示结点间相邻关系的矩阵。邻接矩阵是表示结点间相邻关系的矩阵。ai,j=W:0:i 到到 j 无边无边1.图的邻接矩阵表示法图的邻接矩阵表示法一.图的存储 G=(V,E)优点:存储简单;找优点:存储简单;找i邻接点方便邻接点方便(for j=1 to n do if aI,j0 then)缺点:存储空间大;找邻接点费时缺点:存储空间大;找邻接点费时 n=100000 2 2 3 02 0 1 0 32 1 0 0 23 0 0 0 40
2、 3 2 4 01 2 3 4 51 2345一维数组存储顶点信息;顶点间的关系 邻接表是图的一种链式存储结构,在邻接表中,对于图中的每一个顶点u都建立一个单向链表,链表中的每一结点用来描述顶点u的邻接点。2.邻接表邻接表顶点v指向第一个邻结点link顶点v 边权w 指向下一个邻结点next邻接表的实现有两种方法:指针链表和邻接表的实现有两种方法:指针链表和。数组模拟链表实际上就是链表的线性存储,把链表用多个数数组模拟链表实际上就是链表的线性存储,把链表用多个数组或者记录来存储,操作简单方便。组或者记录来存储,操作简单方便。constconst maxn=10000;/maxn=10000;/
3、图的顶点上限图的顶点上限 maxm=100000;/maxm=100000;/图的边上限图的边上限 varvar h:array1.maxn of longint;h:array1.maxn of longint;/hi /hi用来记录顶点用来记录顶点i i的第一邻接点位置;的第一邻接点位置;v:array1.2 v:array1.2*maxm of longint;maxm of longint;/vi /vi记录第记录第i i条边的顶点编号;条边的顶点编号;w:array1.2 w:array1.2*maxm of longint;maxm of longint;/wi /wi记录第记录第
4、i i条边的长度;条边的长度;next:array1.2 next:array1.2*maxm of longint;maxm of longint;/nexti /nexti记录下一个邻接点的位置;记录下一个邻接点的位置;i j x2 5 31 3 23 5 22 3 11 2 24 5 41 4 3顶点顶点i hi11321038414512p12345678910 11 12 13 14vp25315332215441wp33222211224433nextp000042153706911readln(i,j,x);readln(i,j,x);5u建立邻接表P:=0;P:=0;For i
5、:=1 to m For i:=1 to m begin begin readln(i,j,x);readln(i,j,x);end;end;Procedure add(i,j,x)inc(p);inc(p);vp:=j;vp:=j;wp:=x;wp:=x;textp:=hi;textp:=hi;hi:=p;hi:=p;u访问结点i的邻接点:p:=hi;p:=hi;while p0 do while p0 do begin begin 处理处理i i邻接点邻接点;边边(i,vpi,vp);p:=nextp;p:=nextp;end;end;3.边表 图的边表就是用图的边表就是用3个一维数组(或
6、者记录)来存储每条边个一维数组(或者记录)来存储每条边的两个顶点及边长,数组的元素个数等于图中边的数量。的两个顶点及边长,数组的元素个数等于图中边的数量。下标下标1234567u3141221v5254353w2243132二.拓扑排序 引例 士兵排队 有有n个士兵个士兵(1n10000),士兵的编号依次为,士兵的编号依次为1、2、3、n。指挥官要把这。指挥官要把这n个士兵从高到矮依次排成一行。但现在指个士兵从高到矮依次排成一行。但现在指挥官无法直接获得每个人的具体身高,只能获得挥官无法直接获得每个人的具体身高,只能获得“p1比比p2高高”这样的比较结果。这样的比较结果。现在已知有现在已知有m
7、(m=100000)个高矮关系,请按照从高到低输)个高矮关系,请按照从高到低输出一种合理的排队序列。出一种合理的排队序列。【输入】【输入】第一行为一个正整数第一行为一个正整数n。第二行为一个正整数第二行为一个正整数m。以下以下m行,每行两个正整数行,每行两个正整数x、y,表示,表示x比比y高。高。【输出】【输出】一行一行n个空格隔开的正整数,表示一种合理的排队序列。个空格隔开的正整数,表示一种合理的排队序列。如:8 10 2 1 1 4 1 5 4 5 4 6 3 5 3 7 5 6 5 8 7 8把士兵看成点,一个高矮关系看成一条有向边把士兵看成点,一个高矮关系看成一条有向边一种合法的排队顺
8、序是:一种合法的排队顺序是:2 3 1 4 7 5 6 8u拓扑排序的定义及算法:对一个有向无环图对一个有向无环图G,将,将G中所有顶点排成一个线性序列,使中所有顶点排成一个线性序列,使得图中任意一对顶点得图中任意一对顶点u和和v,若,若 E,则在线性序列中,则在线性序列中u出现在出现在v之前,这个线性序列称为图之前,这个线性序列称为图G的一个拓扑序列。的一个拓扑序列。生成拓扑序列的过程叫做生成拓扑序列的过程叫做拓扑排序拓扑排序。拓扑排序拓扑排序算法描述算法描述:1.从有向图中选择一个没有前驱从有向图中选择一个没有前驱(入度为入度为0)的顶点并且输出它。的顶点并且输出它。2.从图中删去该顶点从
9、图中删去该顶点,并且删去从该顶点发出的全部有向边。并且删去从该顶点发出的全部有向边。3.返回返回1,直到剩余的图中不存在没有前趋的顶点为止。,直到剩余的图中不存在没有前趋的顶点为止。4.剩余图中还有顶点,说明该有向图中存在环,无拓扑序列。剩余图中还有顶点,说明该有向图中存在环,无拓扑序列。如果一个图有拓扑序列,拓扑序列可能不是唯一的。如果一个图有拓扑序列,拓扑序列可能不是唯一的。u算法实现:1.图的存储:邻接表 readln(n);readln(n);readln(e);readln(e);for p:=1 to e dofor p:=1 to e do begin begin readln(
10、i,j);readln(i,j);inc(dj);/inc(dj);/入度入度 vp:=j;nextp:=hi;hi:=p;vp:=j;nextp:=hi;hi:=p;end;end;2.Bfs实现:head:=0;tail:=0;head:=0;tail:=0;for i:=1 to n do if di=0 then for i:=1 to n do if di=0 then/入度为入度为0 0的入队的入队 begin inc(tail);qtail:=i;end;begin inc(tail);qtail:=i;end;while headtail dowhile head0 do /i
11、 while p0 do /i结点的邻接点去边结点的邻接点去边 begin begin dec(dvp);/dec(dvp);/入度减入度减1 1 if dvp=0 then/if dvp=0 then/入度为入度为0 0的结点入队的结点入队 begin inc(tail);qtail:=vp;end;begin inc(tail);qtail:=vp;end;p:=nextp;p:=nextp;end;end;end;end;3.输出拓扑序列(按入队序列输出队列元素)for i:=1 to n-1 do write(qi,);for i:=1 to n-1 do write(qi,);wri
12、te(qn);write(qn);u拓扑排序的应用 (动态规划)图的最长路问题 给定有向图给定有向图G,有,有n个顶点,个顶点,m条边,题目条边,题目,试求出图,试求出图G中最长路的长度。中最长路的长度。【输入格式】【输入格式】第一行:第一行:n,m 两个数字,分别表示顶点数和边数两个数字,分别表示顶点数和边数 第第2行行第第m+1行:每行三个数字行:每行三个数字x,y,z,分别表示一条边,分别表示一条边的两个端点和长度的两个端点和长度【输出格式】【输出格式】一个数一个数max,表示图,表示图G中最长路的长度。中最长路的长度。【数据范围】【数据范围】对于对于50%的数据,的数据,n=10000
13、,m=100000 对于对于100%的数据,的数据,n=100000,m=1000000 样例输入:样例输入:4 44 4 1 2 11 2 1 2 4 52 4 5 1 3 31 3 3 3 4 23 4 2 样例输出:样例输出:6 612341532分析:123415325436fi:以结点以结点i为终点的最长路径为终点的最长路径f i=max f j+d j,i j是是i的前驱结点的前驱结点目标:目标:max f i 拓扑排序的同时+DP求fi:邻接表存储邻接表存储 入度为入度为0 0的的结点入队的的结点入队,f=0;,f=0;while headtail dowhile head0 d
14、o /i while p0 do /i结点的邻接点去边结点的邻接点去边 begin begin dec(dvp);/i dec(dvp);/i的邻接点的邻接点vpvp入度减入度减1 1 if dvp=0 then/if dvp=0 then/入度为入度为0 0的结点入队的结点入队 begin inc(tail);qtail:=vp;end;begin inc(tail);qtail:=vp;end;p:=nextp;p:=nextp;end;end;end;end;u奖金问题三.最短路径算法Floyd算法算法Dijkstra算法算法Bellman-Ford算法算法SPFA算法算法明确:1 各种
展开阅读全文