- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
第7章 图 7.1 图及其抽象数据类型 7.2 图的表示和实现 7.3 图的遍历 7.4 最小生成树 7.5 最短路径 目的和要求 目的:学习非线性的复杂数据结构——图。 内容:图的概念、抽象数据类型、存储结构;图 的深度和广度优先搜索遍历;最小生成树; 最短路径。 要求:掌握图的存储结构和操作实现。 重点:图的两种存储结构,两种遍历算法,最小 生成树,最短路径。 难点:图的存储和操作实现,最小生成树,最短 路径。 实验:图的建立与遍历,最小代价生成 树,最短路径。 7.1 图及其抽象数据类型 7.1.1 图的基本概念 图的定义和术语 G=(V, E) V={ vi | vi ∈某个数据元素集合} E={ (vi , vj) | vi ,vj∈V} 或 E = {〈vi , vj〉|vi ,vj∈V且Path(vi , vj)} 无向图 有向图 多重图和带自身环的图 1. 图的定义和术语 完全图 带权图 邻接顶点 2.顶点的度 无向图 有向图 degree()=indegree()+outdegree() 3.子图 4.路径 5.连通性 7.1.2 图抽象数据类型 public interface GGraphT //图接口 { int vertexCount(); //返回顶点数 T get(int i); //返回顶点vi元素 int getWeight(int i, int j); //返回边的权值 int insertVertex(T x); //插入顶点 void insertEdge(int i, int j, int weight);//插入边 void removeVertex(int v); //删除顶点 void removeEdge(int i, int j); //删除边 int getNextNeighbor(int v, int w); //返回下一个邻接顶点 } 7.2 图的表示和实现 7.2.1 图的邻接矩阵表示和实现 7.2.2 图的邻接表表示和实现 7.2.3 图的邻接多重表表示 7.2.1 图的邻接矩阵表示和实现 邻接矩阵 (1)不带权图的邻接矩阵 (2)带权图的邻接矩阵 2.邻接矩阵表示的带权图类 (1)带权值的边类 public class Edge implements ComparableEdge { public int start,dest,weight; //边的起点序号、终点序号和权值 } (2)邻接矩阵表示的带权图类 public class AdjMatrixGraphT { SeqListT vertexlist; //顺序表存储图的顶点集合 int[][] adjmatrix; //图的邻接矩阵 final int MAX_WEIGHT = 99999; //最大权值(表示无穷大∞) } (2)邻接矩阵表示的带权图类 顶点集合{A,B,C,D,E}; 边集合{ (0,1,5), (0,3,2), (1,0,5), (1,2,7), (1,3,6), (2,1,7), (2,3,8), (2,4,3), (3,0,2),(3,1,6), (3,2,8), (3,4,9), (4,2,3), (4,3,9)}; (3)图的插入操作 (4)图的删除操作 例7.1 带权无向图的邻接矩阵表示及操作。 7.2.2 图的邻接表表示和实现 邻接表 (1)无向图的邻接表表示 (2)有向图的邻接表表示 2.邻接表表示的带权图类 (1)顶点表元素类 public class VertexT { T data; //顶点数据域 SortedSinglyLinkedListEdge adjlink; //该顶点的边单链表 } (2)邻接表表示的带权图类 public class AdjListGraphT { SeqListVertexT vertexlist; //顶点顺序表 } 图7-20 带权无向图的邻接表存储结
文档评论(0)