大数据结构关键路径实验报告材料Word下载.docx
- 文档编号:15233488
- 上传时间:2022-10-28
- 格式:DOCX
- 页数:16
- 大小:289.67KB
大数据结构关键路径实验报告材料Word下载.docx
《大数据结构关键路径实验报告材料Word下载.docx》由会员分享,可在线阅读,更多相关《大数据结构关键路径实验报告材料Word下载.docx(16页珍藏版)》请在冰豆网上搜索。
911
输出的关键路径为:
1-2-5-7-9和1-2-5-8-9
五、概要设计
为了实现上述操作,抽象数据图的定义如下:
structarcnode//声明边表中结点结构
{
intadjvex;
intdut;
//边上的权值
structarcnode*nextarc;
};
structnode//声明头结点结构
intdata;
intid;
//定点入度
structarcnode*firstarc;
1、基本操作:
(1)voidcreate_ALgraph(ALgraphg,inte,intn)
建立AOE网的邻接表,e为弧的数目,n为顶点数
(2)voidoupe_ALgraph(ALgraphg,intn)
输出AOE网的邻接表
(3)intCriticalpath(ALgraphg,intn)
求AOE网的各个关键活动
2、本程序包含两个模块:
(1)主程序模块;
(2)建立AOE网的邻接表、输出AOE网的邻接表、求AOE网的各个关键活动;
(3)模块调用图:
主程序模块
建立AOE网的邻接表
输出AOE网的邻接表
求AOE网的各个关键活动
3、流程图
六、详细设计
1、存储类型,元素类型,结点类型:
元素类型为整形和指针型。
2、每个模块的分析:
(1)主程序模块:
main()
ALgraphg;
inte,n;
inttag;
printf("
\n请输入顶点的个数和边的个数,用空格间隔:
"
);
scanf("
%d%d"
&
n,&
e);
create_ALgraph(g,e,n);
//建立邻接表
\n输出邻接表信息:
\n"
oupe_ALgraph(g,n);
//建立输出邻接表
\n输出AOE网的关键路径:
弧:
权值\n"
tag=Criticalpath(g,n);
//找关键活动
if(!
tag)
printf("
AOE网有回路\n"
}
(2)建立AOE网的邻接表函数模块
voidcreate_ALgraph(ALgraphg,inte,intn)
{//建立AOE网的邻接表,e为弧的数目,n为顶点数
structarcnode*p;
inti,j,k,w;
请输入顶点的信息和入度,用空格间隔:
for(i=1;
i<
=n;
i++)//结点下标从1开始
{
g[i].data,&
g[i].id);
//输入顶点信息和入度
g[i].firstarc=NULL;
}
for(k=1;
k<
=e;
k++)//建立边表
请输入边的两个顶点以及边上的权值,用空格间隔:
%d%d%d"
i,&
j,&
w);
//输入有向边的两个顶点
p=(structarcnode*)malloc(sizeof(structarcnode));
p->
adjvex=j;
dut=w;
nextarc=g[i].firstarc;
//插入下标为i的边表的第一个结点的位置
g[i].firstarc=p;
输出AOE网的邻接表函数模块
voidoupe_ALgraph(ALgraphg,intn)//输出AOE网的邻接表
inti;
n;
i++)
p=g[i].firstarc;
%d,%d->
g[i].data,g[i].id);
while(p!
=NULL)
{
printf("
%3d%3d"
p->
adjvex,p->
dut);
p=p->
nextarc;
//找下一个邻接点
}
求AOE网的各个关键活动函数模块
intCriticalpath(ALgraphg,intn)//求AOE网的各个关键活动
inti,j,k,count;
inttpord[VEX_NUM+1];
//顺序队列
intve[VEX_NUM+1],le[VEX_NUM+1];
inte[ARC_NUM+1],l[ARC_NUM+1];
intfront=0,rear=0;
//顺序队列的首尾指针初值为0
i++)//各事件最早发生事件初值为0
ve[i]=0;
if(g[i].id==0)//入度为0入队列
tpord[++rear]=i;
count=0;
while(front!
=rear)
front++;
j=tpord[front];
count++;
p=g[j].firstarc;
while(p!
k=p->
adjvex;
g[k].id--;
if(ve[j]+p->
dut>
ve[k])
ve[k]=ve[j]+p->
dut;
if(g[k].id==0)
tpord[++rear]=k;
p=p->
if(count<
n)//该AOE网有回路
return0;
i++)//各事件的最迟发生事件赋初值
le[i]=ve[n];
for(i=n-1;
i>
=1;
i--)//按拓扑序列的逆序取顶点
j=tpord[i];
p=g[j].firstarc;
if(le[k]-p->
dut<
le[j])
le[j]=le[k]-p->
i=0;
for(j=1;
j<
j++)
=NULL)//计算各边<
Vj-1,Vk>
所代表的a(i+1)的e[i]和l[i]
k=p->
e[i]=ve[j];
l[i]=le[k]-p->
if(l[i]==e[i])//输出关键活动
printf("
<
v%d,v%d>
:
%d\n"
g[j].data,g[k].data,p->
i++;
return1;
}
3)函数调用关系图
create_ALgraph(ALgraphg,inte,intn)
oupe_ALgraph(ALgraphg,intn)
Criticalpath(ALgraphg,intn)
3、完整的程序:
#include"
stdio.h"
stdlib.h"
#defineVEX_NUM10//定义最大顶点数
#defineARC_NUM20//定义最多边数
typedefintvertype;
typedefstructnodeALgraph[VEX_NUM+1];
n
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 关键 路径 实验 报告 材料