[数据结构]计算工程完成的关键路径 解题报告

Problem Description

说明: AOE 网络是有向无环加权图,其中顶点表示事件,弧表示活动,权表示活动持续的时间,通常可以用来估算工程完成的时间,即图中从开始点到结束点之间最长的路径对应的时间。请完成一个程序,完成下列任务:
1 、计算 AOE 网络对应的拓扑排序。如果排序结果不唯一,请输出按照从小到大的顺序排列的结果。从小到大的顺序就是输入的节点序列顺序(参见下面关于输入格式的说明)。如图1中满足要求的拓扑排序是: a-b-c-d-e-f-g-h-k ,图2中满足要求的拓扑排序是:v1-v3-v5-v2-v6-v4-v7-v8-v9
2 、计算 AOE 网络的关键路径。注意关键路径可能不唯一,要求输出所有的关键路径。同样,按照是按照从小到大的顺序输出。例,如果得到两条关键路径,分别是0-1-3-6-8-90-1-3-4-5-8-9,那么先输出后一条路径,因为两条路径中前三个节点相同,而后一条路径第四个节点的编号小。
测试用例的输入输出格式说明:
输入:

节点的个数,边的条数;
各个节点的名称序列
边: < 起点 , 终点 , 权值 > 。说明起点和终点是在各个点在输入序列中的位置,如图1中边 表示为 <0,1,6> 。

输出:

拓扑排序;
关键路径

测试用例1是与图1相对应的,测试用例2是与图2相对应的。


图1

图2

测试输入1

9,11
a,b,c,d,e,f,g,h,k,
<0,1,6>,<0,2,4>,<0,3,5>,<1,4,1>,<2,4,1>,<4,6,8>,<4,7,7>,<3,5,2>,<5,7,4>,<6,8,2>,<7,8,4>

测试输出1

a-b-c-d-e-f-g-h-k
a-b-e-h-k

测试输入2

9,11
v1,v2,v3,v4,v5,v6,v7,v8,v9,
<0,4,6>,<0,2,4>,<0,5,5>,<4,1,1>,<2,1,1>,<1,6,8>,<1,7,7>,<5,3,2>,<3,7,4>,<6,8,2>,<7,8,4>

测试输出2

v1-v3-v5-v2-v6-v4-v7-v8-v9
v1-v5-v2-v8-v9

AcCode

//
//  main.cpp
//  计算工程完成的关键路径
//
//  Created by jetviper on 2017/3/26.
//  Copyright © 2017年 jetviper. All rights reserved.
//

#include
#include
#include
int n,b,k;
struct{
    char name[10];
    int innum;
    int outnum;
    int linkto[5000];
    int value[5000];
}node[600];
char temp[5000];
void scanfb(char *temp,int f,int *get){
    char s1[20],s2[20],s3[20];
    int p,s,c;
    int len = strlen(temp);
    if(temp[f]=='<'){
        p=0;
        for(int j=f+1;jlist[i]){
                    int temp = list[i];
                    list[i] = list[j];
                    list[j] = temp;
                }
            }     
        AOEsearch(); 
    }  
}

int road[100][100]={0};
int maxvalue=0,roadnum=0;
char  resroad[100][500];
int start;
void searchMain(char lastroad[100],int cout,int now){
    char sasa[100];
    strcpy(sasa,lastroad);
    if(now!=start)strcat(sasa,"-");
    strcat(sasa,node[now].name);
    if(cout > maxvalue){
        maxvalue = cout;
        roadnum = 1;
        strcpy(resroad[roadnum],sasa);
        
    }
    else if(cout == maxvalue){
        roadnum++;
        strcpy(resroad[roadnum],sasa);
        
    }
    
    for(int i=0;inode[i].linkto[k]){
                    int tp1 = node[i].linkto[j];
                    int tp2 = node[i].value[j];
                    node[i].linkto[j] = node[i].linkto[k];
                    node[i].value[j] = node[i].value[k];
                    node[i].linkto[k] = tp1;
                    node[i].value[k] = tp2;
                }
            }
        }
    }
    //start
    
    q=0;
    p=0;
    for(int i=0;i

你可能感兴趣的:([数据结构]计算工程完成的关键路径 解题报告)