第8章 图应用学习 文档 参考.ppt

  1. 1、本文档共100页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
拓扑排序的实现 问题⑴ 以邻接表作为存储结构 问题⑵ 可以用“弧头顶点的入度减1”的方法来间接实现。 为便于考察每个顶点的入度,引入一个存放各顶点入度的数组(indegree[ ]) 问题⑶ 为了避免每一步选入度为0的顶点时,重复扫描数组indegree,设置一个栈来存储所有入度为0 的顶点。 在进行拓扑排序之前,只要对顶点表扫描一遍,将所有入度为0 的顶点都推入栈中,一旦排序过程中出现新的入度为0 的顶点,也同样将其推入栈中。 1、扫描顶点表,将入度为0 的顶点入栈; 2、while ( 栈非空 ) { 将栈顶顶点v弹出并输出之; 检查v的出边,将每条出边<v,u>终点u的入度减1, 若u的入度变为0,则把u推入栈; } 3、若输出的顶点数小于n,则输出“有回路”;否则拓扑排序正常结束。 拓扑排序算法框架 void TopoSort( ALGraph<T> &G ) { int *indegree=new int[G.vexterNum()]; S.InitStack(); //初始化栈S for(i=0;i<G.vexterNum(); ++i) //初始化入度数组indrgree indegree[i]=0; for(i=0; i<G.vexterNum();++i) //求所有顶点的入度 for(p=G.firstEdge(i); p; p=p->nextedge) indegree[p->adjvex]++; for(i=0;i<G.vexterNum();++i) //将入度为0的顶点入栈 if( !indegree[i] ) S.Push(i); count=0; //对输出顶点计数 拓扑排序算法: while( !S.StackEmpty() ){ i=S.Pop(); cout<<G.getVexValue(i); //输出顶点 ++count; for(p=G.firstEdge(i); p; p=p->nextedge){ k=p->adjvex; if( !(--indegree[k]) ) //将新的入度为的顶点入栈 S.Push(k); } } if(count<G.vexterNum()) cout<<"The network has cycle!\n"; delete []indegree; } 算法的时间复杂度为O(n+e) 拓扑排序算法 用途: 将有向无环图中的顶点线性化; 检测一个有向图中是否存在环。 在学习本章时,应掌握下列学习要点: ⑴ 掌握两种图的存储结构; ⑵ 掌握并学会应用图的两种遍历方法; ⑶ 掌握最小生成树的两种构造算法; ⑷ 掌握求解单源最短路径问题的Dijkstra算法和求解每对顶点之间最短路径的Floyd算法的算法思想与算法描述,并学会应用它们解决实际问题; ⑸ 掌握AOV网和拓扑排序的概念,掌握拓扑排序算法的算法思想与算法描述; 本章小结 Kruskal算法的实现? struct Edge { int u, v; //边的两个顶点序号 float weight; //边的权值 }; void Kruskal(Edge graph[], int n, Edge tree[]){ int* components=new int[n]; for(i=0; i<n; ++i) components[i]=i; //初始化辅助数组 int k=0, j=0; while( k<n-1){ //选出n-1条边 u=graph[j].u; v=graph[j].v; nu=components[u]; nv=components[v]; if ( nu != nv ){ tree[k].u=u; tree[k].v=v; tree[k].weight=graph[j].weight; k++; for(i=0;i<n;i++) //将两个集合统一编号 if(components[i]==nv) components[i]=nu; } j++; } delete []comp

您可能关注的文档

文档评论(0)

文人教参 + 关注
实名认证
内容提供者

老师教学,学生学习备考课程、成人语言培训课程及教材等为提升学生终身学习竞争力,塑造学生综合能力素质,赋能学生而努力

版权声明书
用户编号:6103150140000005

1亿VIP精品文档

相关文档