版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、实验七 图的建立及其应用一、实验目的:(1)掌握图的存储思想及其存储实现。(2)掌握图的深度、广度优先遍历算法思想及其程序实现。(3)掌握图的常见应用算法的思想及其程序实现。(4)理解有向无环图、最短路径等算法二、实验要求1.将算法中的横线内容填写完整,使程序能正常运行2.在主函数中设计一个简单的菜单,具有如下功能。(1)建立有向图的邻接表; (2)输出邻接表; 3.实现图的深度优先遍历的算法(选做)4.完成实际应用(选做)三、实验原理1、图(GRAPH)是一种复杂的数据结构,结点之间的关系可以是任意的,由此图的应用极为广泛,已经渗透到如物理、化学、电讯工程、计算机科学等领域。2、图存储结构:
2、邻接矩阵表示法和邻接表表示法,本次实验图主要以邻接表进行存储。 用邻接矩阵表示法表示图如下图所示:V3V03 0 1 0 1 A = 1 0 1 1 V1V2 0 1 0 0 1 0 0 1 一个无向图的邻接矩阵表示无向图对应的邻接表表示如下图所示: 序号 vertex firstedge0V0 1 3 V11 0 2 3 112V2 V3 3 0 1 一个无向图的的邻接表表示四、实验程序说明图类型定义typedef struct Nodeint dest; /邻接边的弧头结点序号struct Node *next;Edge; /邻接边单链表的结点的结构体typedef structDataT
3、ype data; /图顶点Edge *adj; /邻接边的头指针AdjLHeight; /数组的数据元素类型结构体typedef structAdjLHeight aMaxVertices; /邻接表数组int numOfVerts; /结点个数int numOfEdges; /边个数AdjLGraph; /邻接表结构体五、参考程序#include<malloc.h> /* malloc()等 */#include<stdio.h> /* EOF(=Z或F6),NULL */#include<stdlib.h> /* atoi() */#include&l
4、t;process.h> /* exit() */typedef char DataType;#define MaxVertices 10void AdjInitiate(AdjLGraph *G) /初始化图int i;G->numOfEdges=0;G->numOfVerts=0;for(i=0;i<MaxVertices;i+)G->ai.adj = NULL ;/设置邻接边单链表头指针初值void InsertVertex(AdjLGraph *G,int i,DataType vertex)/在图中的第i个位置插入顶点数据元素vertexif(i>
5、=0&&i<MaxVertices)G->ai.data =vertex; /存储顶点数据元素vertex G->numOfVerts+ ; /个数加1else printf("结点越界");void InsertEdge(AdjLGraph *G,int v1,int v2)/在图中加入边<v1,v2>的信息Edge *p;if(v1<0|v1>=G->numOfVerts|v2<0|v2>=G->numOfVerts)printf("参数v1和v2越界出错!");exi
6、t(0);p=(Edge*)malloc(sizeof(Edge);/申请邻接边单链表结点空间p->dest=v2; /设置邻接边弧头序号 p->next = G->av1.adj ; /新结点插入邻接表的表头 G->av1.adj = p ; /头指针指向新的单链表表头G->numOfEdges+; /边个数加1int GetFirstVex(AdjLGraph G,int v)/取图G中结点v的第一个邻接结点Edge *p;if(v<0|v>=G.numOfVerts)printf("参数出错!");exit(0);p=G.av
7、.adj;if(p!=NULL)return p->dest;else return -1;int GetNextVex(AdjLGraph G,int v1,int v2)/取图G中结点v1的邻接结点v2的下一个邻接结点Edge *p;if(v1<0|v1>=G.numOfVerts|v2<0|v2>=G.numOfVerts)printf("参数v1和v2越界出错!");exit(0);p=G.av1.adj;while(p!=NULL)if(p->dest!=v2) p = p->next ;continue;else bre
8、ak;p=p->next;if(p!=NULL) return p->dest;else return -1;void main(void)int i,k,n,e,v1,v2;char c1;Edge *p;AdjLGraph G;AdjInitiate(&G);printf("输入图的顶点数n");scanf("%d",&n);getchar();printf("输入图顶点为(请输入字母)n");for(i=0;i<n;i+) scanf("%c",&c1); /通过键盘
9、,输入图的顶点 getchar(); InsertVertex(&G,i,c1) ; /插入顶点printf("输入图的边数n");scanf("%d",&e);printf("如果边v1->v2,则输入0,1n");for(k=0;k<e;k+)printf("输入边的顶点为(请输入数字):");scanf("%d,%d",&v1,&v2); /通过键盘,输入图的邻接边的两个顶点 InsertEdge(&G,v1,v2) ; /插入边for(
10、i=0;i<n;i+)/输出邻接表printf("%ct",G.ai.data);p=G.ai.adj;if(p=NULL) printf("数据为空");else while(p!=NULL) printf("%d->",p->dest); p=p->next; printf(""); printf("n");调试参考结果:CBAA序号 vertex firstedge0 1 B1 2 C102 六、应用题(一)校园导游图实验内容:1、 设计学生所在学校的校园平面图,所含景点不少于10个。以图中顶点表示学校内各个景点,并存放景点名称、代号、简介等信息;以边表示路径,存放路径长度等相关信息。2、 为来访客人提供图中任意景点相关信息的查询。3、 为来访客人提供图中任意景点的问路查询,即查询任意两个景点之间的一条最短的简单路径。测试数据:由学生根据学校的实际情况指定。(二)经济代价最低
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 国家开放大学电大本科《环境水利学》期末题库及答案
- 检测公司管理制度汇编
- 喷塑生产线操作规程
- 病理学(本科)考试题目及答案
- 2025年电测仪器合作协议书
- 甲醛车间生产工艺操作规程
- 湖北省咸宁市2026年某中学高一数学分班考试真题含答案
- 2026年福建省社区工作者考试真题解析含答案
- 2025年山东(专升本)理科真题试卷及答案
- 2025年重组葡激酶合作协议书
- 泳池突发安全事故应急预案
- 03K501-1 燃气红外线辐射供暖系统设计选用及施工安装
- 2026年甘肃省公信科技有限公司面向社会招聘80人(第一批)考试重点题库及答案解析
- 2026年上海市虹口区初三上学期一模化学试卷和参考答案
- 涉密文件销毁设备选型与管理
- 高考英语同义词近义词(共1142组)
- 2024年上海市专科层次自主招生考试职业适应性测试真题
- 2026年东营科技职业学院单招综合素质考试必刷测试卷附答案
- 《立体裁剪》课件-3.原型立体裁剪
- 2025年安徽省选调生考试笔试试卷【附答案】
- 2024年小红书酒店集团通案(小游记·探寻新解法)
评论
0/150
提交评论