1.将网拓扑排序 2.进行关键路径算法:采用动态规划的思想每次选择路程长的边作为结果更新dist[]数组。 算法实现: void toposort()//找出其中一个序列 { int cnt=0, mm=0; for(int i=0;i<nnum;i++) if(indegree[i]==0) Queue[cnt]=i, dist[cnt]=0, cnt++; while(cnt<nnum) { edge *head=next_edge[Queue[mm]]; mm++; while(head!=NULL) { indegree[head->to]--; if(indegree[head->to]==0) Queue[cnt]=head->to, cnt++; head=head->next; } } //for(int i=0;i<nnum;i++) printf("%d ",Queue[i]); printf("/n"); } //每次将顶点取出采用动态规划的思想依次求解每个点的最长距离 int keypath() { int front=0,sumnum; while(true) { int cur=Queue[front]; if(front==nnum-1) return sumnum; edge *head=next_edge[cur]; while(head!=NULL) { int curnum=head->to; if(dist[curnum]<dist[cur]+head->cost) dist[curnum]=dist[cur]+head->cost; sumnum=dist[curnum]; head=head->next; } front++; } }