- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
[教育]第7章《图》
算法描述 计算每个顶点的入度 对其进行拓扑排序 排序过程中求顶点的Ve[i] 将得到的拓扑序列进栈 按逆拓扑序列求顶点的Vl[i] 计算每条弧的e[i]和l[i],找出e[i]=l[i]的关键活动 V9 V8 V7 V6 V4 V5 V3 V2 V1 a1=6 a2=4 a3=5 a4=1 a5=1 a6=2 a7=9 a8=7 a9=4 a10=2 a11=4 Status TopologicalSort(ALGraph G , Stack T) {//T为拓扑序列顶点栈 //采用邻接表存储结构,求各顶点的最早发生时间Ve若G无回路, //则用T返回一个拓扑序列,并返回OK,否则返回ERROR for(i=0;iG.vexnum;++i) //使入度为0的顶点入栈,且将Ve初始化 { if(!G.vertices[i].indegree) Push(s,i); Ve[i]=0;} count=0; while(!StackEmpty(S)){ Pop( S, i) ;Push(T,i); count++; for(p= G.vertices[i].firstarc; p; p=p-nextarc) { k=p-adivex; //删除弧、使新入度为0的顶点入栈 if(! (--G.vertices[k].indegree)) Push(S,k); //重新计算k的Ve if(Ve[i]+*(p-info)Ve[k] Ve[k]= Ve[i]+*(p-info); } // for } // while If(countG.vexnum) return ERROR else OK; }// TopologicalSort InitStack(S);//S为入度为0的顶点栈; Status CriticalPath( ALGraph G){ //G为有向图的邻接表存储结构,输出G的各项关键活动 if (!TopologicalSort(G ,T)) return ERROR; Vl[0..G.vexnum]=Ve[0..vexnum] ;// 初始化Vl while(!StackEmpty(T)) //按逆拓扑序列求各顶点的Vl { Pop(T,j); for(p=G.vertices[j].firstarc;p;p=p-nextarc) { k=p-adjvex; dut=*(p-info); // dutj,k if(Vl[j]Vl[k]-dut) Vl[j]=Vl[k]-dut;} }//for for(j=0;jG.vexnum;j++){ //扫描每一条弧 for(p= G.vertices[j].firstarc;p;p=p-nextarc){ k=p-adjvex; dut=*(p-info); ee=Ve[j];el=Vl[k]-dut;求弧的e 、 l if(ee==el) printf(j,k,dut); }// 输出关键活动 }// CriticalPath 0 1 2 3 4 5 6 7 8 v1 v2 v3 v4 v5 v6 v7 v8 v9 0 1 1 1 2 1 1 2 2 1 6 2 4 3 5 ^ 6 9 ^ 4 1 ^ 5 2 ^ 4 1 ^ 7 7 ^ 7 4 ^ 8 10 ^ 8 4 ^ V9 V8 V7 V6 V4 V5 V3 V2 V1 a1=6 a2=4 a3=5 a4=1 a5=1 a6=2 a7=9 a8=7 a9=4 a10=2 a11=4 7.6 最短路径 1. 求从某个源点(V0)到其余各点的最短路径 2. 每一对顶点之间的最短路径 V0 V5 V4 V1 V2 V3 100 30 60 10 20 10 5 50 长度 最短路径 V0,V1 V0,V2 V0,V4,V3 V0, V4 V0, V4,V5 10 50 30 60 无 迪杰斯特拉(Dijkstra)算法思想: 按路径长度递增次序产生最短路径算法 源点 vj1 Vjn … vj2 V0 V5 V4 V1 V2 V3 100 30 60 10 20 10 5 50 1.第一条路径长度最短的路径的特点: 在这条路径上,必定只含一条弧,并且这条弧的权值最小。 (设为(v,vj) ) 几个事实(紧紧围绕路径长度递增): 2.下一条路径长度次短的最短路径(v…vk)的特点: 它只可能有两种情况:或者是直接从源点到该点(v,vk) ; 或者是,从源点经过顶点vj,再到达该顶点(v0,vj,vk); 3. 一般情况下,假设S为已求的最短路径的顶点的集合,则下一条
文档评论(0)