- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[工学]计算机软件技术基础课件006
第7章 图 本章中介绍下列主要内容: 图的定义 图的存储结构 图的遍历操作 图的几个典型问题 [本章学习要求] 掌握:图的定义,有关术语及基本概念。 掌握:图的邻接矩阵、邻接表的存储方法和特点。 了解:图的十字链表和邻接多重表的存储方法。 掌握:图的深度遍历和广度遍历算法,能运用遍历算法实现图的其它运算。 掌握:最小生成树的基本概念,Prim算法和Kruskal算法。 掌握:一个源点到其它各点的最短路径算法。 了解:每一对顶点间的最短路径算法。 掌握:AOV网的基本概念和拓扑排序算法 了解:AOE图基本概念和关键路径算法。 7.1 图的基本概念 7.2 图的存储结构 7.3 图的遍历 7.4 生成树与最小生成树 7.5 最短路径 7.6 有向无环图及其应用 7.1 图的基本概念 图(Graph)——图G是由两个集合V(G)和E(G)组成的,记为G=(V,E) 其中:V(G)是顶点的非空有限集 E(G)是边的有限集合,边是顶点的无序对或有序对 有向图——有向图G是由两个集合V(G)和E(G)组成的 其中:V(G)是顶点的非空有限集 E(G)是有向边(也称弧)的有限集合,弧是顶点的有序对,记为v,w,v,w是顶点,v为弧尾,w为弧头 无向图——无向图G是由两个集合V(G)和E(G)组成的 其中:V(G)是顶点的非空有限集 E(G)是边的有限集合,边是顶点的无序对,记为(v,w)或(w,v),并且(v,w)=(w,v) 子图——如果图G(V,E)和图G‘(V’,E‘),满足: V’?V E’?E 则称G‘为G的子图 顶点的度 无向图中,顶点的度为与每个顶点相连的边数,记TD(v) 有向图中,顶点的度分成入度与出度 入度:以该顶点为头的弧的数目,记为ID(v) 出度:以该顶点为尾的弧的数目,记为OD(v) 对于n顶点、e条边的图,顶点vi的度与顶点的个数以及边的数目之间满足关系: 回路——第一个顶点和最后一个顶点相同的路径叫~ 简单回路——除了第一个顶点和最后一个顶点外,其余顶点不重复出现的回路叫~ 连通——从顶点V到顶点W有一条路径,则说V和W是连通的 连通图——无向图中任意两个顶点都是连通的叫~ 连通分量——无向图的极大连通子图叫~ 7.1.2 图的基本操作 建立图G的存储 CreatGraph(G) 释放G的存储空间 DestroyGraph(G) 查找顶点v GetVex(G,v) 修改顶点v 的值 PutVex(G,v,value) 插入顶点 InsertVex(G,v) 删除顶点 DeleteVex(G,v) 插入边 InsertArc(G,v,w) 删除边 DeleteArc(G,v,w) 深度优先遍历 DFSTraverse(G,v) 广度优先遍历 BFSTraverse(G,v) 找顶点v的位置 LocateVex(G,v) 找顶点v的第一个邻接点 FirstAdjVex(G,v) 找顶点v的相对于w的下一个邻接点 NextAdjVex(G,v,w) 7.2 图的存储结构 图是一种结构复杂的数据结构,图的信息包括两部分,即图中顶点的信息以及描述顶点之间的关系(边或者弧)的信息。 图的存储需要实现顶点和边的信息的存储 7.2.1邻接矩阵——表示顶点间相邻关系的矩阵 定义:设G=(V,E)是有n?1个顶点的图,G的邻接矩阵A是具有以下性质的n阶方阵 #define MaxVertexNum 100 typedef char VertexType; VertexType vexs[MaxVertexNum]; int n; 建立有向图G的邻接矩阵存储 void CreatGraph(MGraph *G) / * 建立有向图G的邻接矩阵存储 */ { int i,j,k,w; char ch; scanf(“%d,%d”,(G-n),(G-e));/* 输入顶点数和边数 */ for (i=0;iG-n;i++) scanf(“%c”,(G-vexs[i])); /* 输入顶点信息,建立顶点表 */ for (i=0;iG-n;i++) for (j=0;jG-n;j++) G-edges[i][j]=0; /* 初始化邻接矩阵 */ for (k=0;kG-e;k++) { scanf(“%d,%d”
文档评论(0)