2 qq 33166758 qq_33166758 于 2016.03.11 13:14 提问

救我,出错了啊,救我救我

//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\n");
printf("如:4,5,9回车表示第四节点到第五节点之间的活动用了9个单位时间\n");
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++;
p->info=time;
p->nextarc=T.program[start-1].firstarc;
T.program[start-1].firstarc=p;
}
}

//找关键路径
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 {
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("|起点|终点|最早开始时间|最迟开始时间|差|判断|\n");
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("关键活动|\n");
}
printf("\n");
p=p->nextarc;
}
}
printf("整个工程所用的最短时间为: %lf个单位时间\n",sumtime);
}

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

3个回答

lx624909677
lx624909677   Ds   Rxr 2016.03.11 14:11

哪儿错了?编译错误还是运行错误

qq_33166758
qq_33166758 没有出错,入度为零没有入栈
接近 2 年之前 回复
wen_wxpk
wen_wxpk   2016.03.11 14:29

是啊,都不贴报文的,怎么看

qq_33166758
qq_33166758 入度为零没有入栈
接近 2 年之前 回复
WinsenJiansbomber
WinsenJiansbomber   2016.03.11 14:30

这么长的代码就不能用好点的格式发!也没说哪错,什么错,叫人一行行代码去读分去析真的费时费力不讨好了

qq_33166758
qq_33166758 入度为零没有入栈
接近 2 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!