| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2200 人关注过本帖
标题:关键路径的问题
只看楼主 加入收藏
yila
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2005-5-15
收藏
 问题点数:0 回复次数:3 
关键路径的问题

看这个程序: 有一个错误,在turborc中,请问怎么改? #include<stdio.h>

#include<stdlib.h> #include<iomanip.h> #include <process.h>

typedef struct node

{

int adjvex;

int dut;

struct node *next;

}edgenode;

typedef struct

{

int projectname;

int id;

edgenode *link;

}vexnode;

void CreateGraphic(vexnode* Graphicmap,int projectnumber,int activenumber)

{

int begin,end,duttem; int i,k; edgenode *p;

for(i=0;i<projectnumber;i++)

{

Graphicmap[i].projectname=i;

Graphicmap[i].id =0;

Graphicmap[i].link =NULL;

}

printf("某项目的开始到结束在图中的节点输入<vi,vj,dut>\n");

printf("如:3,4,9 回车表示第三节点到第四节点之间的活动用了9个单位时间\n");

for(k=0;k<activenumber;k++)

{

scanf("%d,%d,%d",&begin,&end,&duttem);

p=(edgenode*)malloc(sizeof(edgenode));

p->adjvex =end-1;

p->dut =duttem;

Graphicmap[end-1].id ++;

p->next =Graphicmap[begin-1].link ;

Graphicmap[begin-1].link =p;

}

}

int SearchMapPath(vexnode* Graphicmap,int projectnumber,int activenumber,int& totaltime)

{

int i,j,k,m=0;

int front=-1,rear=-1;

int* topologystack=(int*)malloc(projectnumber*sizeof(int));

int* vl=(int*)malloc(projectnumber*sizeof(int));

int* ve=(int*)malloc(projectnumber*sizeof(int));

int* l=(int*)malloc(activenumber*sizeof(int));

int* e=(int*)malloc(activenumber*sizeof(int));

edgenode *p;

totaltime=0;

for(i=0;i<projectnumber;i++) ve[i]=0;

for(i=0;i<projectnumber;i++)

{

if(Graphicmap[i].id==0)

{

topologystack[++rear]=i;

m++;

}

}

while(front!=rear)

{

front++;

j=topologystack[front];

m++;

p=Graphicmap[j].link ;

while(p)

{

k=p->adjvex ;

Graphicmap[k].id --;

if(ve[j]+p->dut >ve[k])

ve[k]=ve[j]+p->dut ;

if(Graphicmap[k].id ==0)

topologystack[++rear]=k;

p=p->next ;

}

}

if(m<projectnumber)

{

printf("\n本程序所建立的图有回路不可计算出关键路径\n");

printf("将退出本程序\n");

return 0;

}

totaltime=ve[projectnumber-1];

for(i=0;i<projectnumber;i++)

vl[i]=totaltime;

for(i=projectnumber-2;i>=0;i--)

{

j=topologystack[i];

p=Graphicmap[j].link ;

while(p)

{

k=p->adjvex ;

if((vl[k]-p->dut )<vl[j])

vl[j]=vl[k]-p->dut ;

p=p->next ;

}

}

i=0;

printf("| 起点 | 终点 | 最早开始时间 | 最迟完成时间 | 差值 | 备注 |\n");

for(j=0;j<projectnumber;j++)

{

p=Graphicmap[j].link;

while(p)

{

k=p->adjvex ;

e[++i]=ve[j];

l[i]=vl[k]-p->dut;

printf("| %4d | %4d | %4d | %4d | %4d |",Graphicmap[j].projectname +1,Graphicmap[k].projectname +1,e[i],l[i],l[i]-e[i]);

if(l[i]==e[i])

printf(" 关键活动 |");

printf("\n");

p=p->next ;

}

}

return 1;

}

void seekkeyroot()

{

int projectnumber,activenumber,totaltime=0;

system("cls");

printf("请输入这个工程的化成图形的节点数:");

scanf("%d",&projectnumber);

printf("请输入这个工程的活动个数:");

scanf("%d",&activenumber);

vexnode* Graphicmap=(vexnode*)malloc(projectnumber*sizeof(vexnode));

CreateGraphic(Graphicmap,projectnumber,activenumber);

SearchMapPath(Graphicmap,projectnumber,activenumber,totaltime);

printf("整个工程所用的最短时间为:%d个单位时间\n",totaltime);

system("pause");

}

int main()

{

int i; char ch;

for(;;)

{

do

{

system("cls");

printf("| 欢迎进入求关键路径算法程序 |");

for(i=0;i<80;i++)printf("*");

printf("%s","(S)tart开始输入工程的节点数据并求出关键路径\n");

printf("%s","(E)xit退出\n");

printf("%s","请输入选择:");

scanf("%c",&ch);

ch=toupper(ch);

}while(ch!='S'&&ch!='E');

switch(ch)

{

case'S':

seekkeyroot();

break;

case'E':

return 1;

}

}

}

搜索更多相关主题的帖子: int 路径 include 关键 node 
2005-05-29 22:27
stnlcd
Rank: 1
等 级:新手上路
帖 子:177
专家分:1
注 册:2004-11-21
收藏
得分:0 

你的程序是c++语法格式,如果想在tc下运行,将它改为: #include<stdio.h>

#include<stdlib.h> #include <process.h>

typedef struct node

{

int adjvex;

int dut;

struct node *next;

}edgenode;

typedef struct

{

int projectname;

int id;

edgenode *link;

}vexnode;

void CreateGraphic(vexnode* Graphicmap,int projectnumber,int activenumber)

{

int begin,end,duttem; int i,k; edgenode *p;

for(i=0;i<projectnumber;i++)

{

Graphicmap[i].projectname=i;

Graphicmap[i].id =0;

Graphicmap[i].link =NULL;

}

printf("某项目的开始到结束在图中的节点输入<vi,vj,dut>\n");

printf("如:3,4,9 回车表示第三节点到第四节点之间的活动用了9个单位时间\n");

for(k=0;k<activenumber;k++)

{

scanf("%d,%d,%d",&begin,&end,&duttem);

p=(edgenode*)malloc(sizeof(edgenode));

p->adjvex =end-1;

p->dut =duttem;

Graphicmap[end-1].id ++;

p->next =Graphicmap[begin-1].link ;

Graphicmap[begin-1].link =p;

}

}

int SearchMapPath(vexnode* Graphicmap,int projectnumber,int activenumber,int totaltime)

{

int i,j,k,m=0;

int front=-1,rear=-1;

int* topologystack=(int*)malloc(projectnumber*sizeof(int));

int* vl=(int*)malloc(projectnumber*sizeof(int));

int* ve=(int*)malloc(projectnumber*sizeof(int));

int* l=(int*)malloc(activenumber*sizeof(int));

int* e=(int*)malloc(activenumber*sizeof(int));

edgenode *p;

totaltime=0;

for(i=0;i<projectnumber;i++) ve[i]=0;

for(i=0;i<projectnumber;i++)

{

if(Graphicmap[i].id==0)

{

topologystack[++rear]=i;

m++;

}

}

while(front!=rear)

{

front++;

j=topologystack[front];

m++;

p=Graphicmap[j].link ;

while(p)

{

k=p->adjvex ;

Graphicmap[k].id --;

if(ve[j]+p->dut >ve[k])

ve[k]=ve[j]+p->dut ;

if(Graphicmap[k].id ==0)

topologystack[++rear]=k;

p=p->next ;

}

}

if(m<projectnumber)

{

printf("\n本程序所建立的图有回路不可计算出关键路径\n");

printf("将退出本程序\n");

return 0;

}

totaltime=ve[projectnumber-1];

for(i=0;i<projectnumber;i++)

vl[i]=totaltime;

for(i=projectnumber-2;i>=0;i--)

{

j=topologystack[i];

p=Graphicmap[j].link ;

while(p)

{

k=p->adjvex ;

if((vl[k]-p->dut )<vl[j])

vl[j]=vl[k]-p->dut ;

p=p->next ;

}

}

i=0;

printf("| 起点 | 终点 | 最早开始时间 | 最迟完成时间 | 差值 | 备注 |\n");

for(j=0;j<projectnumber;j++)

{

p=Graphicmap[j].link;

while(p)

{

k=p->adjvex ;

e[++i]=ve[j];

l[i]=vl[k]-p->dut;

printf("| %4d | %4d | %4d | %4d | %4d |",Graphicmap[j].projectname +1,Graphicmap[k].projectname +1,e[i],l[i],l[i]-e[i]);

if(l[i]==e[i])

printf(" 关键活动 |");

printf("\n");

p=p->next ;

}

}

return 1;

}

void seekkeyroot()

{

int projectnumber,activenumber,totaltime=0; vexnode* Graphicmap;

system("cls");

printf("请输入这个工程的化成图形的节点数:");

scanf("%d",&projectnumber); Graphicmap=(vexnode*)malloc(projectnumber*sizeof(vexnode));

printf("请输入这个工程的活动个数:");

scanf("%d",&activenumber);

CreateGraphic(Graphicmap,projectnumber,activenumber);

SearchMapPath(Graphicmap,projectnumber,activenumber,totaltime);

printf("整个工程所用的最短时间为:%d个单位时间\n",totaltime);

system("pause");

}

int main()

{

int i; char ch;

for(;;)

{

do

{

system("cls");

printf("| 欢迎进入求关键路径算法程序 |");

for(i=0;i<80;i++)printf("*");

printf("%s","(S)tart开始输入工程的节点数据并求出关键路径\n");

printf("%s","(E)xit退出\n");

printf("%s","请输入选择:");

scanf("%c",&ch);

ch=toupper(ch);

}while(ch!='S'&&ch!='E');

switch(ch)

{

case'S':

seekkeyroot();

break;

case'E':

return 1;

}

}

} 


要让一个男人破产,请给他一架相机,要让一个男人倾家荡产,请给他一架望远镜。
2005-05-30 15:30
yila
Rank: 1
等 级:新手上路
帖 子:6
专家分:0
注 册:2005-5-15
收藏
得分:0 
谢谢帮忙了
救了小妹一命

2005-05-31 10:25
ka_ka
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2006-1-4
收藏
得分:0 

也救了小弟我一命啊,谢谢楼上二位了

2006-01-04 13:58
快速回复:关键路径的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023929 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved