第6次图的应用实验实验题目与报告书.docx
- 文档编号:844499
- 上传时间:2022-10-13
- 格式:DOCX
- 页数:9
- 大小:52.43KB
第6次图的应用实验实验题目与报告书.docx
《第6次图的应用实验实验题目与报告书.docx》由会员分享,可在线阅读,更多相关《第6次图的应用实验实验题目与报告书.docx(9页珍藏版)》请在冰豆网上搜索。
第6次图的应用实验实验题目与报告书
淮海工学院计算机科学系
实验报告书
课程名:
《数据结构》
题 目:
实验六:
图的应用实验
——求关键路径及其应用
班 级:
网络072
学 号:
510713220
姓 名:
田静
图的应用实验报告要求
1目的与要求:
1)掌握AOE网的邻接表存储结构表示及创建算法的c语言实现;
2)理解AOE网的拓扑排序算法(算法7.12)的实现原理及应用;
3)掌握AOE网关键路径的计算算法(算法7.13,7.14)及C语言实现与应用;
4)按照实验题目要求独立正确地完成实验内容(提交程序清单及相关实验数据与运行结果);
5)认真书写实验报告,并按时提交。
2实验内容或题目
题目:
图的应用实验——计算AOE网的关键路径
内容:
按照图的“邻接表”存储结构表示AOE网,实现求其关键路径的算法,并验证如下图1所示AOE网的关键路径。
3实验步骤与源程序
#defineINFINITY32768
#defineTrue1
#defineFalse0
#defineError-1
#defineNULL0
#defineOk1
#defineMAX_VERTEX_NUM9
typedefenum{DG,DN,UDG,UDN}GraphKind;
typedefintVertexData;
typedefstructARCNNODE
{
intadjvex;
intweight;
structARCNNODE*nextarc;
typedefstructVERTEXNODE
{
VertexDatadata;
ArcNode*firstarc;
}VertexNode;
typedefstruct
{
VertexNodevertex[MAX_VERTEX_NUM];
intvexnum,arcnum;
GraphKindkind;
}AdjList;
#include"AdjList.h"
#include"STACK.h"
#include
int ve[MAX_VERTEX_NUM];
intVN[9]={3,1,1,1,2,1,1,1,0};
intAN[11][2]={1,6,
2,4,
3,5,
4,1,
4,1,
5,2,
6,9,
7,7,
7,4,
8,2,
8,4};
CreateAdjList(AdjList*G)
{
inti,j;
intarc=0;
ArcNode*arcn,*pre;
G->vexnum=9;
for(i=0;i
{
G->vertex[i].data=i;
G->vertex[i].firstarc=NULL;
if(VN[i]>0)
{
arcn=(ArcNode*)malloc(sizeof(ArcNode));
arcn->nextarc=NULL;
arcn->adjvex=AN[arc][0];
arcn->weight=AN[arc][1];
G->vertex[i].firstarc=arcn;
pre=arcn;
arc++;
for(j=1;j { arcn=(ArcNode*)malloc(sizeof(ArcNode)); arcn->nextarc=NULL; arcn->adjvex=AN[arc][0]; arcn->weight=AN[arc][1]; pre->nextarc=arcn; pre=arcn; arc++; } } } } printAdjList(AdjList*G) { inti,j; intarc=0; ArcNode*arcn; printf("vexnumis%d: ",G->vexnum); for(i=0;i { printf("vertex[%d]'sdatais: %d\n",i,G->vertex[i].data); arcn=G->vertex[i].firstarc; while(arcn! =NULL) { printf("%d->%d,weight: %d ",i,arcn->adjvex,arcn->weight); arcn=arcn->nextarc; } printf("\n"); } } voidFindID(AdjListG,intindegree[MAX_VERTEX_NUM]) { inti; ArcNode*p; for(i=0;i indegree[i]=0; for(i=0;i { p=G.vertex[i].firstarc; while(p! =NULL) { indegree[p->adjvex]++; p=p->nextarc; } }/*for*/ } intTopoOrder(AdjListG,Stack*T) { intcount,i,j,k; ArcNode*p; intindegree[MAX_VERTEX_NUM]; StackS; InitStack(T); InitStack(&S); FindID(G,indegree); for(i=0;i if(indegree[i]==0) Push(&S,i); count=0; for(i=0;i ve[i]=0; while(! IsEmpty(&S)) { Pop(&S,&j); Push(T,j); count++; p=G.vertex[j].firstarc; while(p! =NULL) { k=p->adjvex; if(--indegree[k]==0) Push(&S,k); if(ve[j]+p->weight>ve[k]) ve[k]=ve[j]+p->weight; p=p->nextarc; } } if(count return(Error); else return(Ok); } intCriticalPath(AdjListG) { ArcNode *p; inti,j,k,dut,ei,li; chartag; intvl[MAX_VERTEX_NUM]; StackT; if(! TopoOrder(G,&T)) return(Error); for(i=0;i vl[i]=ve[G.vexnum-1]; while(! IsEmpty(&T)) { Pop(&T,&j); p=G.vertex[j].firstarc; while(p! =NULL) { k=p->adjvex; dut=p->weight; if(vl[k]-dut vl[j]=vl[k]-dut; p=p->nextarc; } } for(j=0;j { p=G.vertex[j].firstarc; while(p! =NULL) { k=p->adjvex; dut=p->weight; ei=ve[j];li=vl[k]-dut; tag=(ei==li)? '*': ''; printf("%d,%d,%d,%d,%d,%c\n",G.vertex[j].data,G.vertex[k].data,dut,ei,li,tag); p=p->nextarc; } } return(Ok); } intmain() { AdjListG; CreateAdjList(&G); printAdjList(&G); CriticalPath(G); return0; } #include #defineOVERFLOW-1 #defineOK0 #defineERROR1 #defineTRUE1 #defineFALSE0 #defineSTACK_INIT_SIZE1000 #defineSTACKINCREMENT10 typedef intSElemtype; typedefintStatus; typedefstructSTACK { SElemType*base; SElemType*top; intstacksize; }Stack; typedefstructSTACKSqStack; typedefstructSTACK*pSqStack; StatusInitStack(SqStack *S); StatusDestroyStack(SqStack*S); StatusClearStack(SqStack*S);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 应用 实验 题目 报告书
![提示](https://static.bdocx.com/images/bang_tan.gif)