数据结构(六)课件.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Dijkstra算法的实现 template class Weight, int graph_size void GraphWeight,graph_size::set_distances(Vertex source, Weight distance[]) const { Vertex v,w; bool found[graph_size];//集合S for (v=0; vcount; v++) { found[v]=false; distance[v]=adjacency[source][v]; } found[source]=true;distance[source]=0; for (int i=0; icount; i++ ) { Weight min=infinity;//numeric_limitsint::max(); for (w=0; wcount; w++) if (!found[w]) if ( distance[w]min) {v=w; min=distance[w];} found[v]=true; for (w=0; wcount; w++) if (!found[w]) if (min+adjacency[v][w] distance[w]) distance[w]= min+adjacency[v][w]; } } * 上机作业 在机器上用C++分别实现和图状结构有关的算法。 想一想为什么用Dijkstra算法可以求出最短路径? * 数据结构(六) 常宝宝 北京大学计算机科学与技术系 chbb@pku.edu.cn * 内容提要 图状结构 -实现 -遍历 -拓扑排序 -最短路径 * 邻接矩阵 如果一个有向图含有n个顶点,则可以用n×n的布尔型矩阵adjacency[n][n]来存储图状结构。 若顶点v邻接到顶点w,则adjacency[v][w]= true,否则adjacency[v][w]= false 上述图状结构的表示方法称为邻接矩阵表示法。 对于无向图而言,采用邻接矩阵表示法,则邻接矩阵必为对称矩阵,即adjacency[v][w]= adjacency[w][v]。 * 邻接矩阵 邻接矩阵的C++实现 template int max_size class Graph { int count; //顶点数 bool adjacency[max_size][max_size]; //邻接矩阵 }; * 邻接表 除采用邻接矩阵表示图状结构外,还可以采用邻接表的方法实现图状结构。 在邻接表表示法中,n个顶点的图状结构可以表示成一个含有n个元素的线性表(称为顶点表)和n个线性表(称为邻接表)。每个顶点对应一个邻接表,顶点v对应的邻接表记录了顶点v邻接到的所有顶点。 顶点表和邻接表既可以采用链式线性表也可以采用顺序线性表。 * 邻接表 * 邻接表 邻接表的C++实现(顶点表为顺序表,邻接表为链表) typedef int Vertex; template int max_size class Graph { int count; //顶点数 List Vertex neighbors[max_size]; //邻接表 }; * 邻接表 邻接表的C++实现(顶点表、邻接表均为链表),这种实现也称为十字链表法。 class Edge; class Vertex { Edge* first_edge; Vertex* next_vertex; }; class Edge { Vertex* end_point; Edge* next_edge; }; class Graph { Vertex* first_vertex; }; * 图的遍历 和树的遍历类似,可以从图的某个顶点出发访遍图中其余顶点,且使每一个顶点仅被访问一次,这个过程称为图的遍历。 图的遍历比树的遍历复杂。 树的遍历始于根结点,图中没有根结点。 图中可能存在回路。 常用的图遍历方法 深度优先遍历 宽度优先遍历 * 深度优先遍历 深度优先遍历类似于树的先根遍历,其基本思想为: 从图中某个顶点v0出发,访问此顶点。然后依次从v0未被访问的邻接结点出发深度优先遍历图,直到图中所有和顶点v0连通的顶点都被访问到。 若此时图中尚有顶点未被访问,则另选图中一个未曾被访问的顶点作起始点,重复上述过程,直到图中所有顶点都被访问到为止。 * 深度优先遍历 图中可

您可能关注的文档

文档评论(0)

liuxiaoyu99 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档