数据结构_关键路径实验报告材料
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
{
int adjvex;
int dut; //边上的权值
struct arcnode *nextarc;
};
struct node //声明头结点结构
{
int data;
int id; //定点入度
struct arcnode *firstarc;
};
元素类型为整形和指针型。
2、每个模块的分析:
(1)主程序模块:
求AOE网的各个关键活动
2、本程序包含两个模块:
(1)主程序模块;
(2)建立AOE网的邻接表、输出AOE网的邻接表、求AOE网的各个关键活动;
(3)模块调用图:
主程序模块
建立AOE网的邻接表
输出AOE网的邻接表
求AOE网的各个关键活动
3、流程图wk.baidu.com
六、详细设计
1、存储类型,元素类型,结点类型:
struct arcnode//声明边表中结点结构
1、基本操作:
(1)void create_ALgraph(ALgraph g,int e,int n)
建立AOE网的邻接表,e为弧的数目,n为顶点数
(2)void oupe_ALgraph(ALgraph g,int n)
输出AOE网的邻接表
(3)int Criticalpath(ALgraph g,int n)
printf("\n输出AOE网的关键路径:\n");
printf("弧:权值\n");
tag=Criticalpath(g,n); //找关键活动
if(!tag)
printf("AOE网有回路\n");
}
(2)建立AOE网的邻接表函数模块
void create_ALgraph(ALgraph g,int e,int n)
一、实验目的
1、巩固和加深对数据结构课程基本知识的理解,综合数据结构课程里学的理论知识,完成对关键路径程序的设计。
2、理解和掌握图的各种基本数据结构的定义、存储结构和相应的算法,并能够用c语言实现。
3、理解AOE网和拓扑排序、求关键路径的算法。
二、实验内容
对于给定的一个工程施工图,该图以边为单位从键盘输入,编写能够找出该图的关键路径的程序。
{ //建立AOE网的邻接表,e为弧的数目,n为顶点数
struct arcnode *p;
int i,j,k,w;
printf("请输入顶点的信息和入度,用空格间隔:");
for(i=1;i<=n;i++) //结点下标从1开始
{
scanf("%d%d",&g[i].data,&g[i].id); //输入顶点信息和入度
struct arcnode//声明边表中结点结构
{
int adjvex;
int dut; //边上的权值
struct arcnode *nextarc;
};
struct node //声明头结点结构
{
int data;
int id; //定点入度
struct arcnode *firstarc;
};
main()
{
ALgraph g;
int e,n;
int tag;
printf("\n请输入顶点的个数和边的个数,用空格间隔:");
scanf("%d%d",&n,&e);
create_ALgraph(g,e,n); //建立邻接表
printf("\n输出邻接表信息:\n");
oupe_ALgraph(g,n); //建立输出邻接表
}
printf("\n");
}
}
求AOE网的各个关键活动函数模块
int Criticalpath(ALgraph g,int n)//求AOE网的各个关键活动
{
int i,j,k,count;
int tpord[VEX_NUM+1]; //顺序队列
int ve[VEX_NUM+1],le[VEX_NUM+1];
p->adjvex=j;
p->dut=w;
p->nextarc=g[i].firstarc; //插入下标为i的边表的第一个结点的位置
g[i].firstarc=p;
}
}
输出AOE网的邻接表函数模块
void oupe_ALgraph(ALgraph g,int n) //输出AOE网的邻接表
{
int i;
三、实验环境
1、硬件配置:Pentium(R) Dual-Core9 CUP E6500 @2.93GHz,1.96的内存
2、软件环境:Microsoft Windows XP Professional Service Pack 3,Microsoft Visual C++ 6.0
四、需求分析
1、输入的形式和输入值的范围:根据题目要求与提示输入所建图的顶点个数和边的个数,用空格间隔,并且所输入的顶点和边的数目不超过定义好的VEX_NUM和ARC_NUM,然后输入顶点的信息和入度以空格为间隔,最后输入每2个顶点以及边的权值。
struct arcnode *p;
for(i=1;i<n;i++)
{
p=g[i].firstarc;
printf("%d,%d->",g[i].data,g[i].id);
while(p!=NULL)
{
printf("%3d%3d",p->adjvex,p->dut);
p=p->nextarc; //找下一个邻接点
int e[ARC_NUM+1],l[ARC_NUM+1];
int front=0,rear=0;//顺序队列的首尾指针初值为0
struct arcnode *p;
for(i=1;i<=n;i++) //各事件最早发生事件初值为0
ve[i]=0;
for(i=1;i<=n;i++)
if(g[i].id==0) //入度为0入队列
g[i].firstarc=NULL;
}
for(k=1;k<=e;k++) //建立边表
{
printf("请输入边的两个顶点以及边上的权值,用空格间隔:");
scanf("%d%d%d",&i,&j,&w); //输入有向边的两个顶点
p=(struct arcnode *)malloc(sizeof(struct arcnode));
2、输出的形式:输出AOE网的关键路径。
3、程序所能达到的功能:对于给定的一个工程施工图,该图以边为单位从键盘输入,该程序能够输出该AOE网的关键路径。
4、测试数据:工程施工图如下:
输入顶点的个数和边的个数:9 11
输出的关键路径为:1-2-5-7-9和1-2-5-8-9
五、概要设计
为了实现上述操作,抽象数据图的定义如下:
int adjvex;
int dut; //边上的权值
struct arcnode *nextarc;
};
struct node //声明头结点结构
{
int data;
int id; //定点入度
struct arcnode *firstarc;
};
元素类型为整形和指针型。
2、每个模块的分析:
(1)主程序模块:
求AOE网的各个关键活动
2、本程序包含两个模块:
(1)主程序模块;
(2)建立AOE网的邻接表、输出AOE网的邻接表、求AOE网的各个关键活动;
(3)模块调用图:
主程序模块
建立AOE网的邻接表
输出AOE网的邻接表
求AOE网的各个关键活动
3、流程图wk.baidu.com
六、详细设计
1、存储类型,元素类型,结点类型:
struct arcnode//声明边表中结点结构
1、基本操作:
(1)void create_ALgraph(ALgraph g,int e,int n)
建立AOE网的邻接表,e为弧的数目,n为顶点数
(2)void oupe_ALgraph(ALgraph g,int n)
输出AOE网的邻接表
(3)int Criticalpath(ALgraph g,int n)
printf("\n输出AOE网的关键路径:\n");
printf("弧:权值\n");
tag=Criticalpath(g,n); //找关键活动
if(!tag)
printf("AOE网有回路\n");
}
(2)建立AOE网的邻接表函数模块
void create_ALgraph(ALgraph g,int e,int n)
一、实验目的
1、巩固和加深对数据结构课程基本知识的理解,综合数据结构课程里学的理论知识,完成对关键路径程序的设计。
2、理解和掌握图的各种基本数据结构的定义、存储结构和相应的算法,并能够用c语言实现。
3、理解AOE网和拓扑排序、求关键路径的算法。
二、实验内容
对于给定的一个工程施工图,该图以边为单位从键盘输入,编写能够找出该图的关键路径的程序。
{ //建立AOE网的邻接表,e为弧的数目,n为顶点数
struct arcnode *p;
int i,j,k,w;
printf("请输入顶点的信息和入度,用空格间隔:");
for(i=1;i<=n;i++) //结点下标从1开始
{
scanf("%d%d",&g[i].data,&g[i].id); //输入顶点信息和入度
struct arcnode//声明边表中结点结构
{
int adjvex;
int dut; //边上的权值
struct arcnode *nextarc;
};
struct node //声明头结点结构
{
int data;
int id; //定点入度
struct arcnode *firstarc;
};
main()
{
ALgraph g;
int e,n;
int tag;
printf("\n请输入顶点的个数和边的个数,用空格间隔:");
scanf("%d%d",&n,&e);
create_ALgraph(g,e,n); //建立邻接表
printf("\n输出邻接表信息:\n");
oupe_ALgraph(g,n); //建立输出邻接表
}
printf("\n");
}
}
求AOE网的各个关键活动函数模块
int Criticalpath(ALgraph g,int n)//求AOE网的各个关键活动
{
int i,j,k,count;
int tpord[VEX_NUM+1]; //顺序队列
int ve[VEX_NUM+1],le[VEX_NUM+1];
p->adjvex=j;
p->dut=w;
p->nextarc=g[i].firstarc; //插入下标为i的边表的第一个结点的位置
g[i].firstarc=p;
}
}
输出AOE网的邻接表函数模块
void oupe_ALgraph(ALgraph g,int n) //输出AOE网的邻接表
{
int i;
三、实验环境
1、硬件配置:Pentium(R) Dual-Core9 CUP E6500 @2.93GHz,1.96的内存
2、软件环境:Microsoft Windows XP Professional Service Pack 3,Microsoft Visual C++ 6.0
四、需求分析
1、输入的形式和输入值的范围:根据题目要求与提示输入所建图的顶点个数和边的个数,用空格间隔,并且所输入的顶点和边的数目不超过定义好的VEX_NUM和ARC_NUM,然后输入顶点的信息和入度以空格为间隔,最后输入每2个顶点以及边的权值。
struct arcnode *p;
for(i=1;i<n;i++)
{
p=g[i].firstarc;
printf("%d,%d->",g[i].data,g[i].id);
while(p!=NULL)
{
printf("%3d%3d",p->adjvex,p->dut);
p=p->nextarc; //找下一个邻接点
int e[ARC_NUM+1],l[ARC_NUM+1];
int front=0,rear=0;//顺序队列的首尾指针初值为0
struct arcnode *p;
for(i=1;i<=n;i++) //各事件最早发生事件初值为0
ve[i]=0;
for(i=1;i<=n;i++)
if(g[i].id==0) //入度为0入队列
g[i].firstarc=NULL;
}
for(k=1;k<=e;k++) //建立边表
{
printf("请输入边的两个顶点以及边上的权值,用空格间隔:");
scanf("%d%d%d",&i,&j,&w); //输入有向边的两个顶点
p=(struct arcnode *)malloc(sizeof(struct arcnode));
2、输出的形式:输出AOE网的关键路径。
3、程序所能达到的功能:对于给定的一个工程施工图,该图以边为单位从键盘输入,该程序能够输出该AOE网的关键路径。
4、测试数据:工程施工图如下:
输入顶点的个数和边的个数:9 11
输出的关键路径为:1-2-5-7-9和1-2-5-8-9
五、概要设计
为了实现上述操作,抽象数据图的定义如下: