qq_33166758 2016-03-11 05:14 采纳率: 0%
浏览 1291

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

//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 2016-03-11 06:11
    关注

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

    评论

报告相同问题?

悬赏问题

  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥30 用arduino开发esp32控制ps2手柄一直报错
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题
  • ¥15 Visual Studio问题
  • ¥20 求一个html代码,有偿