网站大量收购独家精品文档,联系QQ:2885784924

数据结构 严蔚敏 -第7章 图(刘).ppt

  1. 1、本文档共49页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构 严蔚敏 -第7章 图(刘)

第7章 图 刘灵丽 湘南学院 主要内容 7.1 图的定义和术语 7.2 图的存储结构 7.2.1 数组表示法 7.2.2 邻接表 7.3 图的遍历 7.3.1 深度优先搜索 7.3.2 广度优先搜索 7.4 图的连通性问题 7.4.3 最小生成树 7.5 有向无环图及其应用 7.5.1 拓扑排序 7.6 最短路径 7.6.1 从某个源点到其余各顶点的最短路径 7.6.2 每一对顶点之间的最短路径 /* 深度优先遍历图 */ void dfsL(Lgraph G,int v) { Vnode *p; printf(%3d,G[v].data); vis[v]=1; /* 顶点v被访问,标志置1 */ p=G[v].next; while(p){ v=p-data; if(vis[v]==0) dfsL(G,v); /* 顶点v未被访问时继续遍历 */ p=p-next; } }/* dfs */ 深度优先遍历算法(递归算法) Boolean visited[MAX]; Status (*VisitFunc)(int v); void DFSTraverse(Gragh G, Status (*Visit)(int v)){ VisitFunc=Visit; for(v=0;vG.vexnum;++v)visited[v]=FALSE; for(v=0;vG.vexnum;++v)if(!visited[w]) DFS(G,v); } void DFS(Gragh G,int v) {visited[v]=TRUE;VisitFunc(v); for(w=FirstAdjVex(G.v);w=0;w=NextAdjVex(G,v,w)) if(!visited[w]) DFS(G,W); } 广度优先遍历算法 void BFSTraverse(Graph G, Status(* Visit)(int v)){ for(v=0;vG.vexnum;++v) visited[v]=FALSE; InitQueue(Q); for(v=0;vG.vexnum;++v) if(!visited[v]){ visited[v]=TRUE;Visit(v); EnQueue(Q,v); while(! QueueEmpty(Q)){ DeQueue(Q,u); for(w=FirstAdjVex(G,u);w=0;w=NextAdjVex(G,u,w)) Visited[w]=TRUE;visit(w); EnQueue(Q,w); } } } } 求关键路径步骤: 求Ve(i) 求Vl(j) 求e(i) 求l(i) 计算l(i)-e(i) 问题提出 算法思想:设N=(V,{E})是连通网,TE是N上最小生成树中边的集合。 1.初始令U={u0},(u0?V), TE=?。 2.在所有u?U,v?V-U的边(u,v)?E中,找一条代价最 小的边(u0,v0)。 3.将(u0,v0)并入集合TE,同时v0并入U。 4.重复上述操作直至U=V为止,则T=(V,{TE})为N的最 小生成树。 方法一:普里姆(Prim)算法 构造最小生成树的方法 例: 1 6 5 4 3 2 6 5 1 3 5 6 6 4 2 5 1 3 1 1 6 3 1 4 1 6 4 3 1 4 2 1 1 6 4 3 2 1 4 2 5 1 6 5 4 3 2 1 4 2 5 3 算法实现:图用邻接矩阵表示。 例: 1 6 5 4 3 2 6 5 1 3 5 6 6 4 2 5 1 6 5 4 3 2 1 2 3 4 5 方法二:克鲁斯卡尔(Kruskal)算法 算法思想: 1.设连通网N=(V,{E}),令最小生成树初始状态为只有 n个顶点而无边的非连通图T=(V,{?}),每个顶点自成一个连通分量。 2.在E中选取代价最小的边,若该边依附的顶点落在T中不同的连通分量上,则将此边加入到T中;否则,舍去此边,选取下一条代价最小的边。 3.依此类推,直至T中所有顶点都在同一连通分量上为止。 7.5 有向无环图及其应用 7.5.1 拓扑排序 问题提出:假设以有向图表示一个工程的施工图或程序的数据流图,则图中不允许出现回路。如何检查有向图中是否存在回路的方法之一,是对有向图进行拓扑排序。 什么是拓扑排序:把AOV网络中各顶点按照它们相互之间的优先关系排列成一个线性序列的过程叫拓扑排序。 拓扑排序的方法: 1.在有向图中选一个没有前驱的顶点且输出之。 2.从图中删除该顶点和所有以它为尾的弧。 3.

文档评论(0)

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

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

1亿VIP精品文档

相关文档