数据结构教程第6章图.ppt
《数据结构教程第6章图.ppt》由会员分享,可在线阅读,更多相关《数据结构教程第6章图.ppt(191页珍藏版)》请在三一办公上搜索。
1、第六章 图,本章的主要内容是:,图的基本概念图的存储结构图的遍历最小生成树最短路径AOV网与拓扑排序AOE网与关键路径,图论发展史,图论是组合数学的一个分支,也是近几十年来最活跃的数学分支之一.到目前为止,它已有二百六十多年的发展历史.图论的发展历史大体可以分为三个阶段:第一阶段是图论的萌芽阶段,它从十八世纪中叶到十九世纪中叶.这时,图论的多数问题是围绕游戏而产生的,其代表性的工作就是Knigsberg七桥问题.1736年L.Euler发表了他著名的Knigsberg七桥问题的论文,这是图论的第一篇文章.,第二阶段从十九世纪中叶到二十世纪中叶.在此阶段,图论问题大量出现.如著名的四色问题、Ha
2、milton问题以及图的可平面问题等.在第二个阶段还应该特别提到Cayley把树应用于化学领域,Kirchhoff用树去研究电网络的分析问题.在漫长的300年中,图论几乎停留在数学游戏阶段.虽然这阶段里21岁的G.Kirchhoff在1847年从电网络问题,A.Cayley在1857年从计算有机化学的同分异构等不止一次地建立起图论的基本概念,但是直到1936年D.Knig发表的经典著作才有了图论的第一本专著.,二十世纪中叶以后是图论发展的第三阶段,即图论的应用阶段.由于生产管理、军事、交通运输、计算机网络、计算机科学、数字通讯、线性规划、运筹学等方面提出的实际问题的需要,特别是许多离散性问题的
3、出现、刺激和推动,以及由于有了大型电子计算机,而使大规模问题的求解成为可能,图论及其应用的研究得到了飞速的发展.这个阶段的开创性工作是以Ford和Fulkerson建立的网络流理论为代表的.图论与其它学科的相互渗透,以及图论在生产实际中广泛地应用,都使图论的发展更加充满活力.,几个有趣的图论问题,Knigsberg七桥背后的故事 Knigsberg七桥位于前苏联的加里宁格勒,历史上曾是德国东普鲁士省的省会,霹雷格尔横穿城堡,河中有两个小岛B与C,并有七座桥连接岛与河岸及岛与岛(见图)。是否存在一种走发,从四块陆地中的任意一块开始,通过每一座桥恰好一次再回到起点。这就是著名的Knigsberg七
4、桥问题,即一笔画问题;也是图论的起源。,欧拉1707年出生在瑞士的巴塞尔城,19岁开始发表论文,直到76岁。几乎每一个数学领域都可以看到欧拉的名字,从初等几何的欧拉线,多面体的欧拉定理,立体解析几何的欧拉变换公式,四次方程的欧拉解法到数论中的欧拉函数,微分方程的欧拉方程,级数论的欧拉常数,变分学的欧拉方程,复变函数的欧拉公式等等。据统计他那不倦的一生,共写下了886本书籍和论文,其中分析、代数、数论占40%,几何占18%,物理和力学占28%,天文学占11%,弹道学、航海学、建筑学等占3%。1733年,年仅26岁的欧拉担任了彼得堡科学院数学教授。1741年到柏林担任科学院物理数学所所长,直到17
5、66年,重回彼得堡,没有多久,完全失明。欧拉在数学上的建树很多,对著名的哥尼斯堡七桥问题的解答开创了图论的研究。,图论欧拉,能否从某个地方出发,穿过所有的桥仅一次后再回到出发点?,哥尼斯堡七桥问题,七桥问题的图模型,哥尼斯堡七桥问题,欧拉回路的判定规则:1.如果通奇数桥的地方多于两个,则不存在欧拉回路;2.如果只有两个地方通奇数桥,可以从这两个地方之一出发,找到欧拉回路;3.如果没有一个地方是通奇数桥的,则无论从哪里出发,都能找到欧拉回路。,四色问题,为了能够迅速地区分一个平面地图或球面地图上的各个国家(假设这些国家在地图上都是连通的),需要用若干种颜色对这些国家着色,使得具有公共边界的两个国
6、家涂染不同的颜色.那么,要保证每张地图都能如此着色,最少需要多少种颜色?这个问题是1850年被一名刚毕业的大学生Francis Guthrie首先提出的,直到1976年,四色问题被美国Illinois大学的K.Appel和W.Haken用计算机证明是正确的,这个证明令数学界震惊,它用了1200多小时,作出100亿个独立的逻辑判断.尽管有了这个机器证明,但它仍然是数学上未解决的问题之一.,Hamilton问题,Hamilton问题是图论中一直悬而未解的一大问题。它起源于1856年,当时英国数学家Hamilton设计了一种名为周游世界的游戏。他在一个实心的正十二面体的十二个顶点上标以世界上著名的二
7、十座城市的名字,要求游戏者沿十二面体的棱从一个城市出发,经过每座城市恰好一次,然后返回到出发点,即“绕行世界”。正十二面体的顶点与棱的关系可以用平面上的图表示,把正十二面体的顶点与棱分别对应图的顶点与边,就得到正十二面体图。,正十二面体 Peterson图,旅行售货员问题,给出城市之间的距离,要求一位推销员从某一城市出发,周游每个城市一次,然后回到出发的城市,并且选的路径最短。这是一个图论优化问题,最早由美国数学家威特涅于1934年在普林斯顿一次讨论班上提出。1954年几位美国数学家写了第一篇论文,用线性方程的方法解决了49个城市的旅行售货员问题。后来也有不少论文讨论这个问题,在理论和应用上都
8、很有价值。,生活中,人们常常需要考虑一些对象之间的某种特定的关系.如某区域内,两城市之间有无交通线;一群人中,两个人之间相识或不相识等等.这种关系是对称的,即如果甲对于乙有某种关系,则乙对于甲也有这种关系.可以用一个图形来描述给定对象之间的某个关系:我们用平面上的点分别表示这些对象,若对象甲和乙有关系,就用一条线连接表示甲和乙的两个点.这种由一些点与连接其中某些点对的线所构成的图形就是图论中所研究的图.图/Graph:可直观地表示离散对象之间的相互关系,研究它们的共性和特性,以便解决具体问题。,6.1 图的基本概念,图的定义,图是由顶点的有穷非空集合和顶点之间边的集合组成,通常表示为:G=(V
9、,E)其中:G表示一个图,V是图G中顶点的集合,E是图G中顶点之间边的集合。,在线性表中,元素个数可以为零,称为空表;在树中,结点个数可以为零,称为空树;在图中,顶点个数不能为零,但可以没有边。,如果图的任意两个顶点之间的边都是无向边,则称该图为无向图。,若顶点vi和vj之间的边没有方向,则称这条边为无向边,表示为(vi,vj)。,若从顶点vi到vj的边有方向,则称这条边为有向边,表示为。,如果图的任意两个顶点之间的边都是有向边,则称该图为有向图。,6.1 图的基本概念,图的基本术语,简单图:在图中,若不存在顶点到其自身的边,且同一条边不重复出现。,数据结构中讨论的都是简单图。,6.1 图的基
10、本概念,图的基本术语,邻接、依附无向图中,对于任意两个顶点vi和顶点vj,若存在边(vi,vj),则称顶点vi和顶点vj互为邻接点,同时称边(vi,vj)依附于顶点vi和顶点vj。,V1的邻接点:V2、V4V2的邻接点:V1、V3、V5,6.1 图的基本概念,图的基本术语,邻接、依附有向图中,对于任意两个顶点vi和顶点vj,若存在弧,则称顶点vi邻接到顶点vj,顶点vj邻接自顶点vi,同时称弧依附于顶点vi和顶点vj。,V1的邻接点:V2、V3V3的邻接点:V4,6.1 图的基本概念,在线性结构中,数据元素之间仅具有线性关系;在树结构中,结点之间具有层次关系;在图结构中,任意两个顶点之间都可能
11、有关系。,不同结构中逻辑关系的对比,在线性结构中,元素之间的关系为前驱和后继;在树结构中,结点之间的关系为双亲和孩子;在图结构中,顶点之间的关系为邻接。,不同结构中逻辑关系的对比,无向完全图:在无向图中,如果任意两个顶点之间都存在边,则称该图为无向完全图。,有向完全图:在有向图中,如果任意两个顶点之间都存在方向相反的两条弧,则称该图为有向完全图。,图的基本术语,6.1 图的基本概念,含有n个顶点的无向完全图有多少条边?含有n个顶点的有向完全图有多少条弧?,含有n个顶点的无向完全图有n(n-1)/2条边。含有n个顶点的有向完全图有n(n-1)条边。,6.1 图的基本概念,稀疏图:称边数很少的图为
12、稀疏图;稠密图:称边数很多的图为稠密图。,顶点的度:在无向图中,顶点v的度是指依附于该顶点的边数,通常记为TD(v)。,6.1 图的逻辑结构,图的基本术语,顶点的入度:在有向图中,顶点v的入度是指以该顶点为弧头的弧的数目,记为ID(v);顶点的出度:在有向图中,顶点v的出度是指以该顶点为弧尾的弧的数目,记为OD(v)。,图的基本术语,在具有n个顶点、e条边的无向图G中,各顶点的度之和与边数之和的关系?,6.1 图的基本概念,图的基本术语,在具有n个顶点、e条边的有向图G中,各顶点的入度之和与各顶点的出度之和的关系?与边数之和的关系?,6.1 图的基本概念,定理1.3.1(Handshaking
13、)设无向图G=(V,E)有e条边,则G中所有顶点的度之和等于e的两倍。证明思路:考虑每条边在求和中的贡献。定理 无向图中度为奇数的顶点个数恰有偶数个。证明思路:将图中顶点的次分类,再利用定理1。定理 设有向图G=(V,A)有e条边,则G中所有顶点的入度之和等于所有顶点的出度之和,也等于e。证明思路:考虑每条边在求和中的情况。,即d(v)=2e,即d(v)=d+(v)=e,记住了吗?,几个重要定理,例 证明任何一群人中,有偶数个人认识其中奇数个人.(匈牙利数学竞赛试题)证 用n个顶点表示n个人.如果两个人相识,就用一条线把他们对应的一对顶点连起来,这样就得到了一个图G.每一个人所认识的人的数目就
14、是他对应的顶点的次,于是问题就转化为证明图G中奇点的个数为偶数,而这正是定理的结论.,权:是指对边赋予的有意义的数值量。网:边上带权的图,也称网图。,图的基本术语,6.1 图的基本概念,路径:在无向图G=(V,E)中,从顶点vp到顶点vq之间的路径是一个顶点序列(vp=vi0,vi1,vi2,vim=vq),其中,(vij-1,vij)E(1jm)。若G是有向图,则路径也是有方向的,顶点序列满足E。,图的基本术语,一般情况下,图中的路径不惟一。,V1 到V4的路径:V1 V4 V1 V2 V3 V4 V1 V2 V5V3 V4,6.1 图的基本概念,路径长度:,6.1 图的逻辑结构,图的基本术
15、语,非带权图路径上边的个数带权图路径上各边的权之和,V1 V4:长度为1V1 V2 V3 V4:长度为3V1 V2 V5V3 V4:长度为4,路径长度:,图的基本术语,非带权图路径上边的个数带权图路径上各边的权之和,V1 V4:长度为8V1 V2 V3 V4:长度为7V1 V2 V5V3 V4:长度为15,6.1 图的基本概念,回路(环):第一个顶点和最后一个顶点相同的路径。简单路径:序列中顶点不重复出现的路径。简单回路(简单环):除了第一个顶点和最后一个顶点外,其余顶点不重复出现的回路。,图的基本术语,6.1 图的基本概念,子图:若图G=(V,E),G=(V,E),如果VV 且E E,则称图
16、G是G的子图。,图的基本术语,6.1 图的基本概念,连通图:在无向图中,如果从一个顶点vi到另一个顶点vj(ij)有路径,则称顶点vi和vj是连通的。如果图中任意两个顶点都是连通的,则称该图是连通图。连通分量:非连通图的极大连通子图称为连通分量。,图的基本术语,如何求得一个非连通图的连通分量?,6.1 图的基本概念,V1,V2,V3,V4,V5,V6,V7,图的基本术语,连通分量是对无向图的一种划分。,6.1 图的基本概念,强连通图:在有向图中,对图中任意一对顶点vi和vj(ij),若从顶点vi到顶点vj和从顶点vj到顶点vi均有路径,则称该有向图是强连通图。强连通分量:非强连通图的极大强连通
17、子图。,图的基本术语,如何求得一个非连通图的连通分量?,6.1 图的基本概念,图的基本术语,V1,V2,6.1 图的基本概念,生成树:n个顶点的连通图G的生成树是包含G中全部顶点的一个极小连通子图。,生成森林:在非连通图中,由每个连通分量都可以得到一棵生成树,这些连通分量的生成树就组成了一个非连通图的生成森林。,如何理解极小连通子图?,图的基本术语,6.1 图的基本概念,6.1 图的基本概念,有向图中路的应用,例有A,B,C三个瓶,分别能装油8L,5L和3L.如果A装满油,B和C是空的,怎样以最快的速度平分A中的油?解法 我们用三位数码表示A,B,C三个瓶子装油的情况,又因为三位数码之和不变,
18、所以可以用后两位数码表示三个瓶子装油的情况.例如:(0,0)表示初始状态.根据题意:共有十六种可能的状态,用这16个状态为顶点作图G,使得两个状态相邻当且仅当它们可以经过一次倒油相互转化.于是,问题就是要求从(0,0)到(4,0)的一条最短路.,容易作出图G(如下图):,通过观察图得知共有两条从(0,0)到(4,0)的路:第一条:(0,0)(5,0)(2,3)(2,0)(0,2)(5,2)(4,3)(4,0);第二条:(0,0)(0,3)(3,0)(3,3)(5,1)(0,1)(1,0)(1,3)(4,0);从而,最快的速度平分即是最短的路所对应的过程,即第一条路的过程就是以最快的速度平分油的
19、过程。,能说出具体操作吗?,图的抽象数据类型定义,class Graphpublic:Graph();void insertVertex(const T,6.1 图的基本概念,6.2 图的存储结构,是否可以采用顺序存储结构存储图?,图的特点:顶点之间的关系是m:n,即任何两个顶点之间都可能存在关系(边),无法通过存储位置表示这种任意的逻辑关系,所以,图无法采用顺序存储结构。,如何存储图?,考虑图的定义,图是由顶点和边组成的,分别考虑如何存储顶点、如何存储边。,邻接矩阵(数组表示法),基本思想:用一个一维数组存储图中顶点的信息,用一个二维数组(称为邻接矩阵)存储图中各顶点之间的邻接关系。,假设图
20、G(V,E)有n个顶点,则邻接矩阵是一个nn的方阵,定义为:,G.Edgeij,1 若(vi,vj)E(或E)0 其它,6.2 图的存储结构,无向图的邻接矩阵的特点?,无向图的邻接矩阵,主对角线为 0 且一定是对称矩阵。,6.2 图的存储结构,如何求顶点i的度?,无向图的邻接矩阵,V1,V3,V4,V2,邻接矩阵的第i行(或第i列)非零元素的个数。,6.2 图的存储结构,如何判断顶点 i 和 j 之间是否存在边?,无向图的邻接矩阵,V1,V3,V4,V2,测试邻接矩阵中相应位置的元素G.Edgeij是否为1。,6.2 图的存储结构,如何求顶点 i 的所有邻接点?,无向图的邻接矩阵,V1,V3,
21、V4,V2,将数组中第 i 行元素扫描一遍,若G.Edgeij为1,则顶点 j 为顶点 i 的邻接点。,6.2 图的存储结构,有向图的邻接矩阵,有向图的邻接矩阵一定不对称吗?,不一定,例如有向完全图。,6.2 图的存储结构,有向图的邻接矩阵,如何求顶点 i 的出度?,邻接矩阵的第 i 行元素之和。,6.2 图的存储结构,有向图的邻接矩阵,如何求顶点 i 的入度?,邻接矩阵的第 i 列元素之和。,6.2 图的存储结构,有向图的邻接矩阵,如何判断从顶点 i 到顶点 j 是否存在边?,测试邻接矩阵中相应位置的元素G.Edgeij是否为1。,6.2 图的存储结构,网图的邻接矩阵,网图的邻接矩阵可定义为
22、:,wij 若(vi,vj)E(或E)0 若i=j 其他,0 2 5 0 0 8 7 0,6.2 图的存储结构,邻接矩阵存储图的类,template class Graphmtx:public Graphfriend istream,6.2 图的存储结构,邻接表,邻接表存储的基本思想:对于图的每个顶点vi,将所有邻接于vi的顶点链成一个单链表,称为顶点vi的边表(对于有向图则称为出边表),所有边表的头指针和存储顶点信息的一维数组构成了顶点表。,图的邻接矩阵存储结构的空间复杂度?如果为稀疏图则会出现什么现象?,假设图G有n个顶点e条边,则存储该图需要O(n2)。,6.2 图的存储结构,邻接表有两
23、种结点结构:顶点表结点和边表结点。,顶点表 边 表,data:数据域,存放顶点信息。adj:指针域,指向边表中第一个结点。dest:邻接点域,边的终点在顶点表中的下标。link:指针域,指向边表中的下一个结点。,6.2 图的存储结构,template struct Edge int dest;E cost;Edge*link;template struct Vertex T data;Edge*adj;,定义邻接表的结点,6.2 图的存储结构,无向图的邻接表,边表中的结点表示什么?,每个结点对应图中的一条边,邻接表的空间复杂度为O(n+e)。,6.2 图的存储结构,无向图的邻接表,如何求顶点
24、i 的度?,顶点i的边表中结点的个数。,6.2 图的存储结构,如何判断顶点 i 和顶点 j之间是否存在边?,测试顶点 i 的边表中是否存在终点为 j 的结点。,无向图的邻接表,6.2 图的存储结构,有向图的邻接表,如何求顶点 i 的出度?,顶点 i 的出边表中结点的个数。,6.2 图的存储结构,有向图的邻接表,如何求顶点 i 的入度?,各顶点的出边表中以顶点 i 为终点的结点个数。,6.2 图的存储结构,有向图的邻接表,如何求顶点 i 的所有邻接点?,遍历顶点 i 的边表,该边表中的所有终点都是顶点 i 的邻接点。,6.2 图的存储结构,网图的邻接表,6.2 图的存储结构,邻接表表示的图的类定
25、义,6.2 图的存储结构,template class Graphlnk:public Graphfriend istream,图的存储结构的比较邻接矩阵和邻接表,O(n2),O(n+e),6.2 图的存储结构,6.3 图的遍历,图的遍历操作,图的遍历是在从图中某一顶点出发,对图中所有顶点访问一次且仅访问一次。,图的遍历操作要解决的关键问题,在图中,如何选取遍历的起始顶点?,在线性表中,数据元素在表中的编号就是元素在序列中的位置,因而其编号是唯一的;在树中,将结点按层序编号,由于树具有层次性,因而其层序编号也是唯一的;在图中,任何两个顶点之间都可能存在边,顶点是没有确定的先后次序的,所以,顶点
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 教程 章图
链接地址:https://www.31ppt.com/p-5986042.html