- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
7.5 最短路径问题 7.6 拓扑排序 问题: 假设以有向图表示一个工程的施工图或程序的数据流图,则图中不允许出现回路。 检查有向图中是否存在回路的方法之一,是对有向图进行拓扑排序。 何谓“拓扑排序”? 对有向图进行如下操作: 按照有向图给出的次序关系,将图中顶点排成一个线性序列,对于有向图中没有限定次序关系的顶点,则可以人为加上任意的次序关系。 例如:对于下列有向图 B D A C 可求得拓扑有序序列: A B C D 或 A C B D 由此所得顶点的线性序列称之为拓扑有序序列 B D A C 反之,对于下列有向图 不能求得它的拓扑有序序列。 因为图中存在一个回路 {B, C, D} 如何进行拓扑排序? (1)从有向图中选取一个没有前驱 的顶点,并输出之; 重复上述两步,直至图空,或者图不空但找不到无前驱的顶点为止。 (2)从有向图中删去此顶点以及所 有以它为尾的弧; 图7-13(1)中A没有前驱,输出A,然后删去A及其关联的弧之后得到图7-13(2); B和C没有前驱,任选其一,假定选择B输出,并删去B及其关联的弧得到图7-13(3); 此时C没有前驱,输出C,并删去C及其关联的弧得到图7-13(4); 此时D没有前驱,输出D,并删去D及其关联的弧得到图7-13(5);最后输出E,于是就得到一个拓扑有序序列ABCDE。 typedef struct { VertexType data;//顶点信息 int indegree;//顶点的入度 ArcNode *firstarc;//指向第一个邻接点 } VNode; 采用邻接表作有向图的存储结构,且在表头结点中增加一个存放顶点入度的域(indegree),即将邻接表中定义的类型修改如下: 为避免每次都要搜索入度为零的顶点,在算法中设置一个“栈”,以保存“入度为零”的顶点。 int TopologicalSort(ALGraph G){ … count=0;//对输出顶点计数 while(top-1){//栈不空时循环 … }/while if(countG.n)return ERROR;//该有向图有回路 else return OK; } void InitQueue(LinkQueue Q){ } Q.front=Q.rear=new QNode; Q.front-next=Q.rear-next=NULL; void DeQueue(LinkQueue Q, ElemType e){ } Q.front=Q.front-next;e=Q.front-data; void EnQueue(LinkQueue Q, ElemType e){ } p=new QNode; p-data=e; p-next=NULL; p-prior=Q.front; Q.rear-next=p;Q.rear=p; void BFSearch(ALGraph G,int u,int v){ }//BFSearch InitQueue(Q);//置空的辅助队列Q visited[u]=TRUE;EnQueue(Q,u);//u入队列 found=FALSE; while(Q.front!=Q.rear!found){ DeQueue(Q,u); //队头元素出队并加入路径 p=G.adjlist[u].firstarc; … } while(p!=NULL){ w=p-adjvex; if(w==v){ visited[w]=TRUE;EnQueue(Q,w); found=TRUE;break;} else if(!visited[w]) {visited[w]=TRUE;EnQueue(Q,w);} p=p-nextarc; } 7.4 最小生成树 假设要在 n 个城市之间建立通讯联络网,则连通 n 个城市只需要修建 n-1条线路,如何在最节省经费的前提下建立这个通讯网? 问题: 构造网的一棵最小生成树,即: 在 e 条带权的边中选取 n-1 条边(不构成回路),使“权值之和”为最小。 7.4.2克鲁
您可能关注的文档
最近下载
- 工作研究:实施乡村振兴战略,建设美丽乡村.doc VIP
- 港口危险货物包装专项试卷.doc VIP
- 2024年教师系列中高级职称评审有关政策解读附件10.doc VIP
- 《电力机车制动机》课件 5-18-1 DK-2无火回送.pptx
- 中国心血管健康与疾病报告2023PPT课件.pptx VIP
- 电气自动化设备安装与维修专业(中、高级工)体化课程.pdf VIP
- 河南科技大学 《概率论与数理统计》 试卷2016–2017第二学期期末试卷C.pdf VIP
- 第十六章-会阴部手术病人的护理.pptx VIP
- 小学语文教学课件:《安徒生童话》推进课.pptx
- 学生职业规划大赛《网络工程专业》生涯发展展示PPT.pptx VIP
原创力文档


文档评论(0)