2 qq 33166758 qq_33166758 于 2016.03.11 22:18 提问

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

//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
x19890314x   2016.03.11 22:29

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

qq_33166758
qq_33166758 关键路径
2 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
PD教程PD教程PD教程
为什么下不了呢?为什么下不了呢?为什么下不了呢?为什么下不了呢?为什么下不了呢?为什么下不了呢?为什么下不了呢?为什么下不了呢?为什么下不了呢?
EF修改实体状态(State)时出现异常找不到方法“System.Data.Entity.Infrastructure.set_State”
EF修改实体状态(State)时出现异常找不到方法“System.Data.Entity.Infrastructure.set_State”,具体异常名字记不清楚了(因为已经解决了 O(∩_∩)O哈哈~)。大致上是在读取或设置实体状态时找不到State的get和set方法。 异常出现代码如下:var entry = this._context.Entry(entity); this._contex
大数据与信息传播
数字改变了人类获取信息、表达意见的方式和途径;改变了人类聚合的规律,进而改变了社会网络结构;
poj 1236 强连通分量缩点求入度为0出度为0的分量个数 kosaraju算法
A B C D E F G B - Network of Schools Time Limit:1000MS     Memory Limit:10000KB     64bit IO Format:%I64d & %I64u Submit Status Description A number of schools are connected to
test2.rar......
求助呀求助~为什么要超过20个字呀呀呀呀呀呀呀呀呀呀...
有关map压入对象后,对象的数据成员发生改变的问题
今天调试程序时发现, 执行向map插入一个类的对象之后(或者说在插入该对象时),该对象的数据成员(一个一维的指针)的内容发生改变,但其他数据成员(如int变量)却没有变化。但把插入的元素改为指向该对象的指针时,就没有出现这样的问题。 代码如下: voronoicell c; con.Cells.insert(make_pair(cell_id,c)); c中有个double *pts的指针
图论基础之有向图出入度的计算
马上就开始去老校区进行数模培训了,听韩老师说,美赛很多题都是图论和网络流,于是打算近期恶补图论的相关知识了. 题目是说,对于一个有向图,请用邻接矩阵存储并且输出各个顶点的出度和入度. 解题思路: 这题写出来就是为了好好学习下邻接矩阵的写法,毕竟邻接矩阵也是后续学习图论内容非常重要的一个知识环节. 什么是了邻接矩阵呢?邻接矩阵说的就是对于一个图,把他的所有顶点都抽象出来成为V,把顶点
互联网如何改变了我们:未来是湿的
互联网如何改变了我们:未来是湿的互联网如何改变了我们:未来是湿的互联网如何改变了我们:未来是湿的
[数据结构]Graph之入度与出度计算
注意一下,我的邻接表存储的和课本不太一样,邻接表的第一个顶点我也存在了neighbour数组里了 eg: 0 1 2   1 2 3   2       3 0 1 2 上面的数据全部存储在链表里 template int Graph::in_degree(Vertex v) const {
有向图中各点的出度和入度
分析: 本程序中的有向图都是无权图,所以邻接矩阵中每个元素不是1,就是0 。第i+1个元素的出度就是第i行的所有元素值为1的个数,入度同理。 代码中的n是顶点个数,m是边数。 u是起点,v是终点。 od是outdegree出度,id是indegree入度。 e[MAX][MAX]是邻接矩阵。 代码: #include #include #define MA