图及其应用实验六.docx

上传人:b****6 文档编号:7117929 上传时间:2023-01-19 格式:DOCX 页数:13 大小:39.63KB
下载 相关 举报
图及其应用实验六.docx_第1页
第1页 / 共13页
图及其应用实验六.docx_第2页
第2页 / 共13页
图及其应用实验六.docx_第3页
第3页 / 共13页
图及其应用实验六.docx_第4页
第4页 / 共13页
图及其应用实验六.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

图及其应用实验六.docx

《图及其应用实验六.docx》由会员分享,可在线阅读,更多相关《图及其应用实验六.docx(13页珍藏版)》请在冰豆网上搜索。

图及其应用实验六.docx

图及其应用实验六图及其应用实验六实验六图及其应用1.目的要求:

(1)通过完成本实验,掌握图的两种基本的存储结构(邻接矩阵、邻接表),以及图的基本算法实现(建立、遍历),并能运用图结构分析解决一些实际问题。

(2)本实验训练的要点是:

图的两种基本存储结构,及各种操作的算法实现(建立、遍历、图的典型应用)。

2.实验内容:

(1)建立无向图和有向图的邻接矩阵存储,计算顶点的度,并输出图的基本信息。

(2)建立有向图的邻接表存储表示,并根据存储计算顶点的出度和入度,然后输出图的基本信息。

(3)编写完整的程序实现AOV网的拓扑排序。

(4)编程求AOE网的关键路径。

(5)编程实现单源点最短路径的Dijkstra算法。

三.实验主要流程、基本操作或核心代码、算法片段(该部分如不够填写,请另加附页)

(1)建立无向图和有向图的邻接矩阵存储,计算顶点的度,并输出图的基本信息。

程序代码:

头文件:

#include#include#defineOK1#defineERROR0#defineTRUE1#defineFALSE0#defineOVERFLOW-1typedefintStatus;#defineINIFINITY1000#defineMAX_VERTEX_NUM20typedefenumDG,DN,UDG,UDNGraphKind;typedefcharVertexType;typedefstructVertexTypevexsMAX_VERTEX_NUM;/顶点向量intarcsMAX_VERTEX_NUMMAX_VERTEX_NUM;/邻接矩阵intvexnum,arcnum;/顶点数和弧的数目GraphKindkind;/图的种类MGraph;intLovateVex(MGraphG,VertexTypev);StatusCreateUDN(MGraph&G);StatusCreateDN(MGraph&G);StatusCreateUDG(MGraph&G);StatusCreateDG(MGraph&G);StatusCreateGraph(MGraph&G);voidPrintGraph(MGraphG);voidGraphDegree(MGraphG);主函数:

#include1.hintmain()MGraphG;CreateGraph(G);/创建图PrintGraph(G);/输出图GraphDegree(G);/计算图中顶点的度,并输出printf(“n”);return0;功能函数:

intLovateVex(MGraphG,VertexTypev)for(inti=0;G.vexsi!

=v;i+);returni;StatusCreateUDN(MGraph&G)inti,j,k;VertexTypev1,v2;intw;printf(输入图的顶点数和边数:

n);scanf(“%d%d”,&G.vexnum,&G.arcnum);printf(输入图的顶点信息:

n);for(i=0;iG.vexnum;i+)scanf(“%c”,&G.vexsi);for(i=0;iG.vexnum;i+)for(j=0;jG.vexnum;j+)G.arcsij=INIFINITY;printf(输入边的信息v1,v2,wn);for(k=0;kG.arcnum;k+)scanf(“%c%c%c”,&v1,&v2,&w);i=LovateVex(G,v1);j=LovateVex(G,v2);G.arcsij=w;G.arcsji=G.arcsij;/forkreturnOK;StatusCreateDN(MGraph&G)inti,j,k;VertexTypev1,v2;intw;printf(输入图的顶点数和边数:

n);scanf(“%d%d”,&G.vexnum,&G.arcnum);printf(输入图的顶点信息:

n);for(i=0;iG.vexnum;i+)scanf(“%c”,&G.vexsi);for(i=0;iG.vexnum;i+)for(j=0;jG.vexnum;j+)G.arcsij=INIFINITY;printf(输入边的信息v1,v2,wn);for(k=0;kG.arcnum;k+)scanf(“%c%c%c”,&v1,&v2,&w);i=LovateVex(G,v1);j=LovateVex(G,v2);G.arcsij=w;/forkreturnOK;StatusCreateUDG(MGraph&G)inti,j,k;VertexTypev1,v2;intw;printf(输入图的顶点数和边数:

n);scanf(“%d%d”,&G.vexnum,&G.arcnum);printf(输入图的顶点信息:

n);for(i=0;iG.vexnum;i+)scanf(“%c”,&G.vexsi);for(i=0;iG.vexnum;i+)for(j=0;jG.vexnum;j+)G.arcsij=0;printf(输入边的信息v1,v2n);for(k=0;kG.arcnum;k+)scanf(“%c%c”,&v1,&v2);i=LovateVex(G,v1);j=LovateVex(G,v2);G.arcsij=1;G.arcsji=G.arcsij;/forkreturnOK;StatusCreateDG(MGraph&G)inti,j,k;VertexTypev1,v2;intw;printf(输入图的顶点数和边数:

n);scanf(“%d%d”,&G.vexnum,&G.arcnum);printf(输入图的顶点信息:

n);for(i=0;iG.vexsi;for(i=0;iG.vexnum;i+)for(j=0;jG.vexnum;j+)G.arcsij=0;printf(输入边的信息v1,v2n);for(k=0;kG.arcnum;k+)scanf(“%c%c”,&v1,&v2);i=LovateVex(G,v1);j=LovateVex(G,v2);G.arcsij=1;/forkreturnOK;StatusCreateGraph(MGraph&G)intkind;pritnf(输入图的类型:

0-DG,1-DN,2-UDG,3-UDN:

n);scanf(“%d”,&kind);G.kind=(GraphKind)kind;switch(G.kind)caseDG:

returnCreateDG(G);caseDN:

returnCreateDN(G);caseUDG:

returnCreateUDG(G);caseUDN:

returnCreateUDN(G);default:

returnERROR;voidPrintGraph(MGraphG)inti,j;printf(图的顶点数和边数:

%d%dn,G.vexnum,G.arcnum);printf(图的顶点信息:

n);for(i=0;iG.vexnum;i+)printf(“%c”,G.vexsi);printf(图的邻接矩阵:

n);for(i=0;iG.vexnum;i+)printf(“n”);for(j=0;jG.vexnum;j+)if(G.arcsij=INIFINITY)printf();elseprintf(“%c”,G.arcsij);/foriprintf(“n”);voidGraphDegree(MGraphG)intindegreeMAX_VERTEX_NUM=0,outdegreeMAX_VERTEX_NUM=0;inti;switch(G.kind)caseDN:

caseDG:

FindIndegree(G,indegree);for(i=0;iG.vexnum;i+)printf(“%c的出度为%dn”,G.vexsi,outdegreei);FindOutdegree(G,outdegree);for(i=0;iG.vexnum;i+)printf(“%c的出度为%dn”,G.vexsi,outdegreei);break;caseUDN:

caseUDG:

FindOutdegree(G,outdegree);for(i=0;iG.vexnum;i+)printf(“%c的度为%dn”,G.vexsi,outdegreei);break;printf(“n”);运行结果:

(2)建立有向图的邻接表存储表示,并根据存储计算顶点的出度和入度,然后输出图的基本信息。

程序代码部分:

头文件:

/1.h#include#include#defineOK1#defineERROR0#defineTRUE1#defineFALSE0#defineOVERFLOW-1typedefintStatus;#defineINIFINITY1000#defineMAX_VERTEX_NUM20typedefenumDG,DN,UDG,UDNGraphKind;typedefcharVertexType;typedefintInfoType;typedefstructArcNodeintadjvex;InfoTypeweight;structArcNode*nextarc;ArcNode;typedefstructVnodeVertexTypedata;ArcNode*firstarc;VNode,AdjListMAX_VERTEX_NUM;typedefstructAdjListvertices;intvexnum,arcnum;GraphKindkind;ALGraph;intLovateVex(ALGraphG,VertexTypev)StatusCreateUDN(ALGraph&G)StatusCreateGraph(ALGraph&G)voidPrintGraph(ALGraphG)主函数:

#include1.hintmain()ALGraphG;CreateGraph(G);/建立图PrintGraph(G);/输出图return0;功能函数:

intLovateVex(ALGraphG,VertexTypev)for(inti=0;G.verticesi.data!

=v;i+);returni;StatusCreateUDN(ALGraph&G)inti,j,k;VertexTypev1,v2;InfoTypew;ArcNode*p,*q;printf(输入图的顶点数和边数:

n);scanf(“%d%d”,&G.vexnum,&G.arcnum);pritnf(输入图的顶点信息:

n);for(i=0;iG.vexnum;i+)scanf(“%d”,&G.verticesi.data);G.verticesi.firstarc=NULL;printf(输入边的信息v1,v2,weightn);for(k=0;kadjvex=j;p-weight=w;p-nextarc=G.verticesi.firstarc;G.verticesi.firstarc=p;q=(ArcNode*)malloc(sizeof(ArcNode);q-adjvex=i;q-nextarc=G.verticesj.firstarc;G.verticesj.firstarc=q;returnOK;StatusCreateGraph(ALGraph&G)intkind;printf(输入图的类型:

0-DG,1-DN,2-UDG,3-UDN:

n);scanf(“%d”,&kind);G.kind=(GraphKind)kind;switch(G.kind)/caseDG:

returnCreateDG(G);caseDN:

returnCreateDN(G);/caseUDG:

returnCreateUDG(G);caseUDN:

returnCreateUDN(G);default:

returnERROR;voidPrintGraph(ALGraphG)inti,j;ArcNode*p;printf(输入图的顶点数和边数:

n);scanf(“%d%d”,&G.vexnum,&G.arcnum);pritnf(输入图的顶点信息:

n);for(i=0;iG.vexnum;i+)scanf(“%d”,&G.verticesi.data);printf(图的邻接表:

n);for(i=0;iadjvex;printf(“%d”,G.verticesj.data);p=p-nextarc;/whileprintf(“n”);/forprintf(“n”);运行结果:

四.实验结果的分析与评价(该部分如不够填写,请另加附页)1.图的无向和有向,边数和点数决定了存储图的方式。

注:

实验成绩等级分为(90100分)优,(8089分)良,(70-79分)中,(6069分)及格,(59分)不及格。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工作范文 > 行政公文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1