基于路径分解的关键路径算法.doc

基于路径分解的关键路径算法.doc

ID:57651360

大小:45.50 KB

页数:5页

时间:2020-08-30

基于路径分解的关键路径算法.doc_第1页
基于路径分解的关键路径算法.doc_第2页
基于路径分解的关键路径算法.doc_第3页
基于路径分解的关键路径算法.doc_第4页
基于路径分解的关键路径算法.doc_第5页
资源描述:

《基于路径分解的关键路径算法.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、基于路径分解的关键路径求解方法关键路径的求解方案可描述为:1)对AOE网进行拓扑排序,若成功,则得出其拓扑有序序列;2)利用拓扑有序序列的逆序,从汇点开始进行逆向的路径分解,直到所有路径全部分解完毕;3)从所有可能路径中挑选出其中路径长度最长的路径,即关键路径。算法设计的关键在于如何实现路径的分解并保存所有路径。根据AOE网的特点,可以设计一个多头单尾链表结构来处理。算法设计思想可描述如下:1)建立图的扩展邻接表存储结构;2)进行拓扑排序,并利用栈保存其拓扑有序序列;3)利用拓扑有序序列的逆序,创建一个多头单尾

2、链表,求出所有可能的路径;4)挑选出其中路径长度最长的路径,即关键路径。完整的程序清单:#include#include#defineN20#defineERROR0#defineOK1#defineM5typedefstructedgenode{/*图的邻接表:邻接链表结点*/intadjvex;/*顶点序号*/intweight;/*对应边的权值*/structedgenode*next;/*下一个结点的指针*/}edgenode;typedefstructvnode{

3、/*图的邻接表:邻接表表头结点*/intdata;/*顶点信息*/intind;/*顶点入度*/structedgenode*link;/*指向邻接链表的指针*/}vnode;typedefstructALgraph{/*图的邻接表:邻接表*/intvexnum,arcnum;/*顶点信息*/vnodeadjlist[N];/*顶点入度*/}ALgraph;typedefstructpnode{/*图的多头单尾链表表头结点*/intpathlength;/*路径长度*/structedgenode*link;/

4、*指向多头单尾链表结点的指针*/}pnode;typedefintElemType;/*定义元素的类型*/typedefstruct{ElemType*base;ElemType*top;intstacksize;/*当前已分配的存储空间*/}SqStack;intInitStack(SqStack*S){S->base=(ElemType*)malloc(N*sizeof(ElemType));if(!S->base)returnERROR;S->top=S->base;S->stacksize=N;retu

5、rnOK;}/*InitStack*/intStackEmpty(SqStack*S){if(S->top==S->base)returnOK;elsereturnERROR;}intPush(SqStack*S,ElemTypee){if(S->top-S->base>=S->stacksize){S->base=(ElemType*)realloc(S->base,(S->stacksize+M)*sizeof(ElemType));if(!S->base)returnERROR;S->top=S->bas

6、e+S->stacksize;S->stacksize+=M;}*S->top++=e;returnOK;}/*Push*/intPop(SqStack*S,ElemType*e){if(S->top==S->base)returnERROR;*e=*--S->top;returnOK;}/*Pop*/voidcreateGraph_list(ALgraph*g);/*建立有向图的邻接表*/voidCri_path(ALgraph*g);/*拓扑排序和关键路径求解*/voidcreateGraph_list(A

7、Lgraph*g){/*建立有向图的邻接表*/inti,j,n,e;charv;edgenode*s;i=0;n=0;e=0;printf("输入顶点序列(以#结束):");while((v=getchar())!='#'){g->adjlist[i].data=v;/*读入顶点信息*/g->adjlist[i].link=NULL;g->adjlist[i].ind=0;i++;}n=i;g->vexnum=n;printf("请输入弧的信息(i=-1结束):i,j:");/*建立邻接链表*/sc

8、anf("%d,%d",&i,&j);while(i!=-1){s=(structedgenode*)malloc(sizeof(edgenode));s->adjvex=j;s->next=g->adjlist[i].link;g->adjlist[i].link=s;g->adjlist[j].ind++;/*顶点j的入度加1*/e++;scanf("%d,%d",&i,&j);}

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。