- 1、本文档共17页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构_关键路径实验报告
一、实验目的
1、巩固和加深对数据结构课程基本知识的理解,综合数据结构课程里学的理论知识,完成对关键路径程序的设计。
2、理解和掌握图的各种基本数据结构的定义、存储结构和相应的算法,并能够用c语言实现。
3、理解AOE网和拓扑排序、求关键路径的算法。 二、实验内容
对于给定的一个工程施工图,该图以边为单位从键盘输入,编写能够找出该图的关键路径的程序。
四、需求分析1、输入的形式和输入值的范围2、输出的形式3、程序所能达到的功能 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;
};
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)
求AOE网的各个关键活动
2、本程序包含个模块:
(1)主程序模块;
(2)()模块调用图:
主程序模块
3、流程图
六、详细设计
1元素类型,结点类型:{
int adjvex;
int dut; //边上的权值
struct arcnode *nextarc;
};
struct node //声明头结点结构
{
int data;
int id; //定点入度
struct arcnode *firstarc;
};
元素类型为整形和指针型。
2、每个模块的分析:
(1)主程序模块: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网的关键路径:\n);
printf(弧:权值\n);
tag=Criticalpath(g,n); //找关键活动
if(!tag)
printf(AOE网有回路\n);
}
(2)建立AOE网的邻接表函数模块
void create_ALgraph(ALgraph g,int e,int n)
{ //建立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); //输入顶点信息和入度
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));
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;
struct arcnode *p;
for(i=1;in;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-n
文档评论(0)