第7章 图及其应用精选PPT.ppt
《第7章 图及其应用精选PPT.ppt》由会员分享,可在线阅读,更多相关《第7章 图及其应用精选PPT.ppt(193页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、第7章 图及其应用第1页,本讲稿共193页 图图图图(Graph)(Graph):是一种网状数据结构。是顶点集是一种网状数据结构。是顶点集V和连接这些顶点的弧集和连接这些顶点的弧集(边集边集)R所组成的结构记为所组成的结构记为:G=(V,R)有向图:有向图:有向图:有向图:若若图中的边是顶点的有序对图中的边是顶点的有序对图中的边是顶点的有序对图中的边是顶点的有序对,则称此图则称此图为有向图。为有向图。有向边又称为弧有向边又称为弧有向边又称为弧有向边又称为弧,通常用尖括弧表示一条通常用尖括弧表示一条有向边有向边,vi,vj表示从顶点表示从顶点vi到到vj的一段弧的一段弧,vi称为称为边的始点边的
2、始点(或弧尾或弧尾),vj称为边的终点称为边的终点(或弧头或弧头),vi,vj和和 vj,vi代表两条不同的弧。代表两条不同的弧。132第2页,本讲稿共193页无无无无向向向向图图图图:若若图图图图中中中中的的的的边边边边是是是是顶顶顶顶点点点点的的的的无无无无序序序序对对对对,则则称称此此图图为无向图。为无向图。通通常常用用圆圆圆圆括括括括号号号号表表表表示示示示无无无无向向向向边边边边,(vi,vj)表表示示顶顶点点vi和和vj间间相相连连的的边边。在在无无向向图图中中(vi,vj)和和(vj,vi)表表示示同同一一条条边边.2341第3页,本讲稿共193页完全图、稠密图、稀疏图完全图、稠
3、密图、稀疏图完全图、稠密图、稀疏图完全图、稠密图、稀疏图 具具有有n个个顶顶点点,n(n-1)/2条条边边的的图图,称称为为完完完完全全全全无无无无向向向向图图图图,具具有有n个个顶顶点点,n(n-1)条条弧弧的的有有向向图图,称称为为完完完完全全全全有有有有向向向向图图图图。完完全全无无向向图和完全有向图都称为图和完全有向图都称为完全图完全图完全图完全图。对对于于一一般般无无向向图图,顶顶点点数数为为n,边边数数为为e,则则 0e n(n-1)/2。对对于于一一般般有有向向图图,顶顶点点数数为为n,弧弧数数为为e,则则 0en(n-1)。当当一一个个图图接接近近完完全全图图时时,则则称称它它
4、为为稠稠稠稠密密密密图图图图,相相反反地地,当一个图中含有较少的边或弧时,则称它为当一个图中含有较少的边或弧时,则称它为稀疏图稀疏图稀疏图稀疏图。第4页,本讲稿共193页子图:子图:子图:子图:对于图对于图G=(V,R),G=(V,R),若有若有V V,R R,则称图则称图G是是G的一个子图。的一个子图。下图给出了下图给出了G与其子图与其子图G。2435167图G435167图G 第5页,本讲稿共193页邻接点邻接点邻接点邻接点 对对于于无无无无向向向向图图图图 G=(V,R),如如如如果果果果边边边边(v(v,v)v)R R,则则则则称称称称顶顶顶顶点点点点v,v,vv互互互互为为为为邻邻邻
5、邻接接接接点点点点,即即v,v相相邻邻接接。边边(v,v)依依附附于于顶顶点点v和和v,或或者说边(者说边(v,v)与顶点)与顶点v和和v相关联。相关联。对对于于有有有有向向向向图图图图G=(V,R)而而言言,若若若若弧弧弧弧vvR R,则则则则称称称称顶顶顶顶点点点点v v邻邻邻邻接接接接到到到到顶顶顶顶点点点点vv,顶顶顶顶点点点点vv邻邻邻邻接接接接自自自自顶顶顶顶点点点点v v,或或者者说说弧弧与与顶顶点点v和和v相关联。相关联。2341132如:顶点如:顶点1、2互为邻接点互为邻接点如:顶点如:顶点1邻接到顶点邻接到顶点2 顶点顶点2邻接自顶点邻接自顶点1第6页,本讲稿共193页权与
6、网权与网权与网权与网 在在实实际际应应用用中中,图图的的边边或或弧弧上上往往往往与与具具有有一一定定意意义义的的数数有有关关,即即每每每每一一一一条条条条边边边边都都都都有有有有与与与与它它它它相相相相关关关关的的的的数数数数,称称为为权权权权,我们将我们将这种带权的图这种带权的图这种带权的图这种带权的图叫做叫做加权图加权图加权图加权图或或网网网网,如图所示。,如图所示。第7页,本讲稿共193页路径和回路路径和回路路径和回路路径和回路路径:路径:路径:路径:所谓顶点所谓顶点vp 到顶点到顶点vq之间的路径之间的路径,是指是指顶点序列顶点序列顶点序列顶点序列vp,vi1,vi2,vim,vq,其
7、中(其中(vp,vi1),(vi1,vi2),(vim,vq)分别为图中的边。)分别为图中的边。路径长度:路径长度:路径长度:路径长度:路径上边的数目路径上边的数目路径上边的数目路径上边的数目称为路径长度。称为路径长度。简单路径:简单路径:简单路径:简单路径:序列中序列中顶点不重复出现的路径顶点不重复出现的路径顶点不重复出现的路径顶点不重复出现的路径称为简单路径。称为简单路径。回路回路回路回路或或或或环:环:环:环:如果如果路径的起点和终点相同路径的起点和终点相同路径的起点和终点相同路径的起点和终点相同(即即vp=vq),则称此则称此路径为回路或环。路径为回路或环。第8页,本讲稿共193页 如
8、图所示的无向图中如图所示的无向图中,顶点顶点顶点顶点v1v1到顶点到顶点到顶点到顶点v5v5的路径有两条的路径有两条的路径有两条的路径有两条,分别为分别为v1,v2,v3,v4与与v1,v5,v4,路径长度分别为路径长度分别为路径长度分别为路径长度分别为3 3和和和和2 2。v1到到v5的两条路径都为的两条路径都为简单路简单路简单路简单路径径径径。简单回路:简单回路:简单回路:简单回路:除第一顶点与最后一个顶点之外除第一顶点与最后一个顶点之外除第一顶点与最后一个顶点之外除第一顶点与最后一个顶点之外,其它顶点不重复其它顶点不重复其它顶点不重复其它顶点不重复出现的回路出现的回路出现的回路出现的回路
9、为为简单回路简单回路或者或者简单环简单环。第9页,本讲稿共193页 连通图和强连通图连通图和强连通图连通图和强连通图连通图和强连通图 在在无向图无向图无向图无向图中,若从顶点中,若从顶点i到顶点到顶点j有路径,则称顶点有路径,则称顶点i和顶和顶点点j是是连通的连通的。若任意两个顶点都是连通的,则称此无向图。若任意两个顶点都是连通的,则称此无向图为为连通图连通图,否则称为,否则称为非连通图非连通图。连通图和非连通图示例见图连通图和非连通图示例见图:第10页,本讲稿共193页 对对于于有有有有向向向向图图图图来来说说,若若图图中中任任任任意意意意一一一一对对对对顶顶顶顶点点点点v vi i和和和和
10、v vj j(ij)(ij)均均均均有有有有从从从从v vi i到到到到 v vj j及及及及从从从从 v vj j到到到到 v vi i的的的的有有有有向向向向路路路路径径径径,则则称称该该有有有有向向向向图图图图是是是是强强强强连连连连通通通通的的的的。强连通图和非强连通图示例见图强连通图和非强连通图示例见图:第11页,本讲稿共193页连通分量和强连通分量连通分量和强连通分量连通分量和强连通分量连通分量和强连通分量 无无无无向向向向图图图图中中,极极大大的的连连通通子子图图为为该该图图的的连连通通分分量量。显显然然,任任何何连连通通图图的的连连通通分分量量只只有有一一个个,即即它它本本身身
11、,而而非非连连通通图图有多个连通分量。有多个连通分量。24351672435167第12页,本讲稿共193页 有有向向图图中中的的极极极极大大大大强强强强连连连连通通通通子子子子图图图图称称为为该该有有向向图图的的强强强强连连连连通通通通分分分分量量量量。显显然然,任任何何强强连连通通图图的的强强连连通通分分量量只只有有一一个个,即即它本身,而非强连通图有多个强连通分量。它本身,而非强连通图有多个强连通分量。下图不是强连通的下图不是强连通的,但它有两个强连通分量但它有两个强连通分量:132321第13页,本讲稿共193页顶点的度顶点的度顶点的度顶点的度2341如:顶点如:顶点1的度为的度为3顶
12、点的顶点的度度度度 是指是指依附于某顶点依附于某顶点依附于某顶点依附于某顶点v vi i的边数的边数的边数的边数,通常记通常记 为为D(v)第14页,本讲稿共193页顶点的度顶点的度顶点的度顶点的度132如:顶点如:顶点2的入度为的入度为2 出度为出度为1有向图有向图有向图有向图中中,要区别顶点的入度和出度的概念。要区别顶点的入度和出度的概念。顶点顶点v的的入度入度入度入度 是指是指以以以以v v为终点的弧的数目为终点的弧的数目为终点的弧的数目为终点的弧的数目记为记为ID(v)顶点顶点v的的出度出度出度出度 是指是指以以以以v v为始点的弧的数目为始点的弧的数目为始点的弧的数目为始点的弧的数目
13、记为记为OD(v)显然:显然:D(v)=ID(v)+OD(v)第15页,本讲稿共193页 7.2.1 邻接矩阵存储法 7.2.2 邻接表表示法7.2 图的存储第16页,本讲稿共193页图的抽象数据类型图的抽象数据类型class Graph/对象对象:由一个顶点的非空集合和一个边集合构成由一个顶点的非空集合和一个边集合构成/每条边由一对顶点来表示。每条边由一对顶点来表示。public:Graph();/建立一个空的图建立一个空的图 void InsertVertex(const T vertex);/插入一个顶点插入一个顶点vertex,该顶点暂时没有入边该顶点暂时没有入边 void Inser
14、tEdge(int v1,int v2,int weight);/在图中插入一条边在图中插入一条边(v1,v2,w)void RemoveVertex(int v);/在图中删除顶点在图中删除顶点v和所有关联到它的边和所有关联到它的边 第17页,本讲稿共193页 void RemoveEdge(int v1,int v2);/在图中删去边在图中删去边(v1,v2)bool IsEmpty();/若图中没有顶点若图中没有顶点,则返回则返回true,否则返回否则返回false T GetWeight(int v1,int v2);/函数返回边函数返回边(v1,v2)的权值的权值 int GetFi
15、rstNeighbor(int v);/给出顶点给出顶点 v 第一个邻接顶点的位置第一个邻接顶点的位置 int GetNextNeighbor(int v,int w);/给出顶点给出顶点 v 的某邻接顶点的某邻接顶点 w 的下一个邻接顶的下一个邻接顶点点;第18页,本讲稿共193页图的存储表示图的存储表示图的模板基类图的模板基类 在模板类定义中的数据类型参数表在模板类定义中的数据类型参数表 中,中,T是顶点数据的类型,是顶点数据的类型,E是边上所附数据的是边上所附数据的类型。类型。这个模板基类是按照最复杂的情况(即带权无向图)来这个模板基类是按照最复杂的情况(即带权无向图)来定义的,如果需要
16、使用非带权图,可将数据类型参数定义的,如果需要使用非带权图,可将数据类型参数表表 改为改为。如果使用的是有向图,也可以对程序做相应的改动。如果使用的是有向图,也可以对程序做相应的改动。第19页,本讲稿共193页图的模板基类图的模板基类 const int maxWeight=0 x7fffffff;/无穷大的值(=)const int DefaultVertices=30;/最大顶点数(=n)template class Graph /图的类定义protected:int maxVertices;/图中最大顶点数 int numEdges;/当前边数 int numVertices;/当前顶点
17、数 int GetVertexPos(T vertex);/给出顶点vertex在图中位置public:第20页,本讲稿共193页 Graph(int sz=DefaultVertices);/构造函数 Graph();/析构函数 bool IsEmpty()/判图空否 return numEdges=0;int NumberOfVertices()return numVertices;/返回当前顶点数 int NumberOfEdges()return numEdges;/返回当前边数virtual T GetValue(int i);/取顶点 i 的值 virtual E GetWeigh
18、t(int v1,int v2);/取边上权值 virtual int GetFirstNeighbor(int v);/取顶点 v 的第一个邻接顶点第21页,本讲稿共193页virtual int GetNextNeighbor(int v,int w);/取邻接顶点 w 的下一邻接顶点 virtual bool InsertVertex(const T vertex);/插入一个顶点vertex virtual bool InsertEdge(int v1,int v2,E cost);/插入边(v1,v2),权为cost virtual bool RemoveVertex(int v);
19、/删去顶点 v 和所有与相关联边 virtual bool RemoveEdge(int v1,int v2);/在图中删去边(v1,v2);第22页,本讲稿共193页邻接矩阵:邻接矩阵:邻接矩阵:邻接矩阵:用一个二维数组(矩阵)来表示图中顶点之间的相邻关系。设图设图G=(V,R)有有n(n1)个顶点个顶点,则则G的邻接矩阵是按如下定义的邻接矩阵是按如下定义的的n阶方阵阶方阵:1 若若(vi,vj)或或R(G)aij=0 反之反之第23页,本讲稿共193页例例例例:图图G1、G2的的邻邻接接矩矩阵阵分分别别表表示示为为A1和和A2,矩矩阵阵的的行、行、列号对应于图中结点的号。列号对应于图中结点
20、的号。0 1 1 11 0 1 01 1 0 11 0 1 00 1 10 0 10 1 02341132G1G2第24页,本讲稿共193页从无向图的邻接矩阵可以得出如下结论:从无向图的邻接矩阵可以得出如下结论:从无向图的邻接矩阵可以得出如下结论:从无向图的邻接矩阵可以得出如下结论:(1)矩阵是对称的,可压缩存储(上(下)三角)矩阵是对称的,可压缩存储(上(下)三角);(2)第)第i行或第行或第i 列中列中1的个数为顶点的个数为顶点i 的度的度;(3)矩阵中)矩阵中1的个数的一半为图中边的数目的个数的一半为图中边的数目;(4)很很容容易易判判断断顶顶点点i 和和顶顶点点j之之间间是是否否有有边
21、边相相连连(看看矩矩阵阵中中i行行j列值是否为列值是否为1)。第25页,本讲稿共193页从有向图的邻接矩阵可以得出如下结论从有向图的邻接矩阵可以得出如下结论从有向图的邻接矩阵可以得出如下结论从有向图的邻接矩阵可以得出如下结论:(1)矩阵不一定是对称的矩阵不一定是对称的;(2)第第i 行中行中1的个数为顶点的个数为顶点i 的出度的出度;(3)第第i列中列中1的个数为顶点的个数为顶点 i的入度的入度;(4)矩阵中矩阵中1的个数为图中弧的数目的个数为图中弧的数目;(5)很容易判断顶点很容易判断顶点i 和顶点和顶点j 是否有弧相连是否有弧相连.第26页,本讲稿共193页 网的邻接矩阵表示:网的邻接矩阵
22、表示:网的邻接矩阵表示:网的邻接矩阵表示:若图若图G是一个有是一个有n个顶点的网,则它的邻接矩阵是具有个顶点的网,则它的邻接矩阵是具有如下性质的如下性质的nn矩阵矩阵A:若若或或(vi,vj)VR(G)反之 第27页,本讲稿共193页 5 7 4 8 5 234158475例:例:例:例:一个有向网一个有向网N及其邻接矩阵的示例。及其邻接矩阵的示例。第28页,本讲稿共193页 n n个顶点需要个顶点需要n*nn*n个单元存储边个单元存储边(弧弧););空间效率空间效率为为O(nO(n2 2)。对稀疏图而言尤其浪费空间。对稀疏图而言尤其浪费空间。对稀疏图而言尤其浪费空间。对稀疏图而言尤其浪费空间
23、。邻接矩阵法优点:邻接矩阵法缺点:容易实现图的操作,如:求某顶点的度、判断顶容易实现图的操作,如:求某顶点的度、判断顶点之间是否有边(弧)、找顶点的邻接点等等。点之间是否有边(弧)、找顶点的邻接点等等。第29页,本讲稿共193页邻接矩阵表示法的邻接矩阵表示法的C+语言类型描述如下:语言类型描述如下:template class Graphmtx:public Graph private:T*VerticesList;/顶点表顶点表 E*Edge;/邻接矩阵邻接矩阵int GetVertexPos(T vertex)/给出顶点给出顶点vertex在图中的位置在图中的位置 for(int i=0;
24、i=0&i=numVertices?VerticesListi:NULL;E GetWeight(int v1,int v2)/取边取边(v1,v2)上权值上权值 return v1!=-1&v2!=-1?Edgev1v2:0;第31页,本讲稿共193页 int GetFirstNeighbor(int v);/取顶点取顶点 v 的第一个邻接顶点的第一个邻接顶点 int GetNextNeighbor(int v,int w);/取取 v 的邻接顶点的邻接顶点 w 的下一邻接顶点的下一邻接顶点 bool InsertVertex(const T vertex);/插入顶点插入顶点vertex
25、bool InsertEdge(int v1,int v2,E cost);/插入边插入边(v1,v2),权值为权值为cost bool RemoveVertex(int v);/删去顶点删去顶点 v 和所有与它相关联的边和所有与它相关联的边 bool RemoveEdge(int v1,int v2);/在图中删去边在图中删去边(v1,v2);第32页,本讲稿共193页template Graphmtx:Graphmtx(int sz)/构造函数构造函数 maxVertices=sz;numVertices=0;numEdges=0;int i,j;VerticesList=new Tmax
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 第7章 图及其应用精选PPT 及其 应用 精选 PPT
限制150内