第7章 图和其应用.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
7.1 图的概念 7.2 图的存储 7.3 图的遍历 7.4 生成树和最小生成树 7.5 最短路径 7.6 有向无环图的应用 图(Graph):是一种网状数据结构。是顶点集V和连接这些顶点的弧集(边集)R所组成的结构记为 : G=(V, R) 有向图:若图中的边是顶点的有序对, 则称此图为有向图。 有向边又称为弧, 通常用尖括弧表示一条有向边, 〈 vi, vj〉表示从顶点vi到vj的一段弧, vi称为边的始点(或弧尾), vj称为边的终点(或弧头), 〈 vi,vj〉和〈 vj, vi〉代表两条不同的弧。 无向图:若图中的边是顶点的无序对, 则称此图为无向图。 通常用圆括号表示无向边, (vi, vj)表示顶点vi和vj间相连的边。在无向图中(vi, vj)和(vj, vi)表示同一条边. 子图:对于图G=(V, R),G′=(V′,R′),若有V′?V, R′?R, 则称图G′是G的一个子图。 下图给出了G与其子图G ′。 权与网 在实际应用中,图的边或弧上往往与具有一定意义的数有关,即每一条边都有与它相关的数,称为权,我们将这种带权的图叫做加权图或网,如图所示。 路径和回路 对于有向图来说, 若图中任意一对顶点vi和vj(i≠j)均有从vi到 vj及从 vj到 vi的有向路径, 则称该有向图是强连通的。 有向图中的极大强连通子图称为该有向图的强连通分量。显然,任何强连通图的强连通分量只有一个,即它本身,而非强连通图有多个强连通分量。 下图不是强连通的, 但它有两个强连通分量: 顶点的度 顶点的度 7.2.1 邻接矩阵存储法 7.2.2 邻接表表示法 图的抽象数据类型 class Graph { //对象: 由一个顶点的非空集合和一个边集合构成 //每条边由一对顶点来表示。 public: Graph( ); //建立一个空的图 void InsertVertex (const T vertex); //插入一个顶点vertex, 该顶点暂时没有入边 void InsertEdge (int v1, int v2, int weight); //在图中插入一条边(v1, v2, w) void RemoveVertex (int v); //在图中删除顶点v和所有关联到它的边 void RemoveEdge (int v1, int v2); //在图中删去边(v1,v2) bool IsEmpty( ); //若图中没有顶点, 则返回true, 否则返回false T GetWeight (int v1, int v2); //函数返回边 (v1,v2) 的权值 int GetFirstNeighbor (int v); //给出顶点 v 第一个邻接顶点的位置 int GetNextNeighbor (int v, int w); //给出顶点 v 的某邻接顶点 w 的下一个邻接顶点 }; 图的存储表示 图的模板基类 在模板类定义中的数据类型参数表 class T, class E 中,T是顶点数据的类型,E是边上所附数据的类型。 这个模板基类是按照最复杂的情况(即带权无向图)来定义的,如果需要使用非带权图,可将数据类型参数表 class T, class E 改为 class T。 如果使用的是有向图,也可以对程序做相应的改动。 图的模板基类 const int maxWeight = 0x7fffffff; //无穷大的值(=?) const int DefaultVertices = 30; //最大顶点数(=n) template class T, class E class Graph { //图的类定义 protected: int maxVertices; //图中最大顶点数 int numEdges; //当前边数 int numVertices; //当前顶点数 int GetVertexPos (T vertex); //给出顶点vertex在图中位置 public: Graph (int sz = DefaultVertices); //构造函数 ~Graph( ); //析构函数 bool IsEmpty ( ) //判图空否

文档评论(0)

kehan123 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档