Chapter07——图.ppt

  1. 1、本文档共145页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
7.8 最短路径 求从某个源点到其余各点的最短路径 a h g c b f d e a b c d e f g h 1 2 3 4 5 6 7 8 例如:下列连通图中, 顶点 a 和顶点 c 是关节点,顶点 d,b,g 也是关节点 深度优先生成树 对上述两个判定准则在算法中如何实现? 1) 设V0为深度优先遍历的出发点 p = G.vertices[0].firstarc; v = p-adjvex; DFSArticul(G, v); // 从第v顶点出发深度优先搜索 if (count G.vexnum) { // 生成树的根有至少两棵子树 printf (0, G.vertices[0].data); // 根是关节点 2) 定义函数: low(v) = Min{visited[v], low[w], visited[k] } 其中: 顶点w 是生成树上顶点v 的孩子; 顶点k 是生成树上和顶点v由回边联接 的祖先; visited记录深度优先遍历时的访问次序 若对顶点v,在生成树上存在一个 子树根w,且 low[w] ≥ visited[v] 则顶点v为关节点。 k v w a h g c b f d e a b c d e f g h 1 2 3 4 5 6 7 8 3 3 1 1 1 1 1 1 例如:下列连通图中, 顶点 a 和顶点 c 是关节点 深度优先生成树 对深度优先遍历算法作如下修改: 1.visited[v]的值改为遍历过程中顶点的访问次序count值; 2.遍历过程中求得 low[v]=Min{visited[v],low[w],visited[k]} 3.从子树遍历返回时,判别 low[w]≥visited[v]? 若是,则顶点v为关节点; for(p=G.vertices[v0].firstarc; p; p=p-nextarc) { } void DFSArticul(ALGraph G, int v0) { // 从第v0个顶点出发深度优先遍历图 G, // 查找并输出关节点 } // DFSArticul min =visited[v0] = ++count; // v0是第count个访问的顶点, // 并设low[v0]的初值为min 检查v0的每个邻接点 low[v0] = min; w = p-adjvex; // w为v0的邻接顶点 if (visited[w] == 0) { // w未曾被访问 DFSArticul(G, w); // 返回前求得low[w] } else // w是回边上的顶点 if (low[w] min) min = low[w]; if (low[w]=visited[v0]) printf(v0, G.vertices[v0].data); //输出关节点 if (visited[w] min) min = visited[w]; 1、什么是拓扑排序 给出有向图G=(V,E),V里的结点的线性序列 (Vi1, Vi2 ,…,Vin)若满足如下条件: 若在有向图G中从结点Vi到结点Vj有一条路径,则在序列中结点Vi必在结点Vj之前,则结点的线性序列(Vi1, Vi2 ,…,Vin)称作一个拓扑序列。 求有向图中顶点的拓扑序列的过程,称作拓扑排序。 7.6 拓扑排序 例如:软件专业学生必须学习一系列基本课程 C9,C10,C1 数值分析 C12 C9 普通物理 C11 C9 线性代数 C10 无 高等数学 C9 C3, C6 操作系统 C8 C5 ,C3 编译

文档评论(0)

2232文档 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档