qq_33166758 2016-03-11 14:18 采纳率: 0%
浏览 1286

为什么入度改变了呢,求助

//c语言关键路径
#include
#include

typedef struct arcnode
{
    int adjvex;   //活动末端
    struct arcnode *nextarc;
    double info;    //活动持续时间
}arcnode;

typedef struct vnode
{
    int data;     //事件名
    arcnode *firstarc;
    int du;    //入度
}vnode;

typedef struct
{
    int vexnum;
    int actnum;
    vnode *program;
}AOE;

//建立AOE网
void create(AOE T)
{
    int i,start,end;
    double time;
    arcnode p;
    T.program=(vnode *)malloc(T.vexnum*sizeof(vnode));
    if(!T.program)
        exit(0);
    for(i=0;i<T.vexnum;i++)
    {
        T.program[i].data=i;
        T.program[i].du=0;
        T.program[i].firstarc=NULL;
    }
    printf("该项目的开始到结束在图中的点的输入 i,j,info ");
    printf("如:4,5,9回车表示第四节点到第五节点之间的活动用了9个单位时间 ");
    for(i=0;i<T.actnum;i++)
    {
        scanf("%d,%d,%lf",&start,&end,&time);
        p=(arcnode
)malloc(sizeof(arcnode));
        p->adjvex=end-1;
        T.program[end-1].du++;
        printf("%d的入度为%d ",T.program[end-1].data+1,T.program[end-1].du);
        p->info=time;
        p->nextarc=T.program[start-1].firstarc;
        T.program[start-1].firstarc=p;
    }
    for(i=0;i<T.vexnum;i++)
    {
          printf("%d的入度为%d ",T.program[i].data+1,T.program[i].du);
    }

}

//找关键路径
void crtical_activity(AOE T)
{
    int stack=(int)malloc((T.vexnum+1)*sizeof(int));
    double ve=(double)malloc(T.vexnum*sizeof(double));   //储存事件最早发生时间
    double vl=(double)malloc(T.vexnum*sizeof(double)) ;    //储存事件最晚发生时间
    double e=(double)malloc(T.actnum*sizeof(double));      //存储活动最早发生时间
    double l=(double)malloc(T.actnum*sizeof(double));      //储存活动最晚发生时间
    int i,j,k,top=0,bottom=0;
    arcnode *p;
    double sumtime=0.0;
    for(i=0;i     {
          printf("%d的入度为%d ",T.program[i].data+1,T.program[i].du);
        if(T.program[i].du==0)
        {
            stack[top++]=i;
        }
    }
    while(top!=bottom)
    {
        i=stack[bottom++];
        p=T.program[i].firstarc;
        while(p)
        {
            k=p->adjvex;
            T.program[k].du--;
            if(T.program[k].du==0)
            {
                stack[top++]=k;
            }
            if(ve[k]info)
            {
                ve[k]=ve[i]+p->info;
            }
            p=p->nextarc;
        }
    }
    sumtime=ve[T.vexnum-1];
    for(i=0;i     {
        vl[i]=ve[T.vexnum-1];
    }
    for(i=T.vexnum;i>=0;i--)
    {
        int k=stack[i];
        p=T.program[k].firstarc;
        while(p)
        {
            j=p->adjvex;
            if(vl[j]-p->info             {
                vl[k]=vl[j]-p->info;
            }
            p=p->nextarc;
        }
    }
    printf("|起点|终点|最早开始时间|最迟开始时间|差|判断| ");
    i=0;
    for(j=0;j     {
        p=T.program[j].firstarc;
        while(p)
        {
            int k=p->adjvex;
            e[++i]=ve[j];
            l[i]=vl[k]-p->info;
            printf("|%4d|%4d|%lf|%lf|%lf|",T.program[j].data+1,T.program[k].data+1,e[i],l[i],l[i]-e[i]);
            if(l[i]==e[i])
            {
                printf("关键活动| ");
            }
            printf(" ");
            p=p->nextarc;
        }
    }
    printf("整个工程所用的最短时间为: %lf个单位时间 ",sumtime);
}

int  main()
{
    AOE t;
    printf("请输入AOE网的事件个数:  ");
    scanf("%d",&t.vexnum);
    printf("请输入AOE网的活动个数:  ");
    scanf("%d",&t.actnum);
    create(t);
    crtical_activity(t);
    return 0;
}图片

  • 写回答

1条回答

  • x19890314x 2016-03-11 14:29
    关注

    看不懂什么代码,可以说明吗

    评论

报告相同问题?

悬赏问题

  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3
  • ¥15 牛顿斯科特系数表表示