数据结构实验三图的创建与访问算法的设计.docx

数据结构实验三图的创建与访问算法的设计.docx

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数据结构实验三图的创建与访问算法的设计

内蒙古工业大学信息工程学院实 验 报告课程名称:数据结构与算法实验名称:图的创建与访问算法的设计实验类型:验证性□ 综合性□ 设计性实验室名称:信息工程学院机房 实验三图的创建与访问算法的设计一、目的本实验的目的是通过理解图的逻辑结构和存储结构,进一步提高使用理论知识指导解决实际问题的能力。题目图的创建与访问算法的设计实验类型设计性。本实验设计了图的创建与访问算法。要求及提示说明:以下4个题中,任意选作一题。2、【问题描述】设有六个比赛项目,规定每个选手至多可参加四个项目,有五人报名参加比赛(如下表所示)设计比赛日程表,使得在尽可能短的时间内完成比赛。姓名项目1项目2项目3项目4张一跳高100米200米跳远王二铅球跳高200米李三标枪跳远马四100米200米跳高董六铅球标枪【基本要求】实现以下基本操作:建立图。输出比赛日程表。对所建的图进行广度优先遍历,输出广度优先遍历序列。解法分析:设用如下六个不同的代号代表不同的项目:跳高跳远标枪铅球100米200米ABCDEF姓名项目1项目2项目3项目4张一AEFB王二DAF李三CB马四EFA董六DC用顶点代表比赛项目,不能同时进行比赛的项目之间连上一条边。某选手比赛的项目必定有边相连(不能同时比赛)。作如下无向图:V6E5E7E9 V5E6E8V1 V2E1E2E4E3V4DV3找到图中未邻接的点为一组比赛时间第一种第二种第三种单位时间1A CD ED F单位时间2B DC FC E单位时间3EAB单位时间4FBA从上表可以看出:只需安排四个单位时间进行比赛(各组项目顺序可交换)。源代码:#include stdio.h#include stdlib.h#define M 40//表结点typedef struct ArcNode /*表结点结构*/{ int adjvex; /*存放与头结点相邻接的顶点在数组中的序号*/ struct ArcNode *next; /*指向与头结点相邻接的下一个顶点的表结点*/}ArcNode;//头结点typedef struct VerNode{ char vertex[M]; /*存放图中顶点的具体信息*/ char v; /*存放图中顶点的信息字母代表*/ struct VerNode *link; /*指针指向对应的单链表中的表结点,即指向顶点的第一个邻接点*/}VerNode;typedef struct{ VerNode adjlist[M]; /*邻接链表表头数组,adjlist[0]不用*/ int vexnum,arcnum; /*顶点数和边数*/ int kind;/*图的类型*/}ALGraph;ALGraph adjg;void create_ALGraph(){ ArcNode *p; int i,v,v1,e,v2; adjg.kind = 2; /*无向图*/printf(\n\t输入顶点数:); scanf(%d, v); printf(\t输入边数:); scanf(%d, e);fflush(stdin); adjg.vexnum = v; /*存放顶点数在adjg.vexnum中 */ adjg.arcnum = e; /*存放边点数在adjg.arcnum中*/ printf(\n\n);//头结点赋值为各顶点值 for(i = 1; i = v; i++) /*i从1开始,adjlist[0]不用*/ { printf(输入顶点 %d 的值(字母,比赛项目) : , i ); scanf(%c,%s, adjg.adjlist[i].v,adjg.adjlist[i].vertex);/*输入顶点的信息*/ fflush(stdin); adjg.adjlist[i].link = NULL; } printf(\n\n);//链接各个表结点for( i = 1; i =adjg.arcnum; i++) { printf(输入第 %d 条边的起始点和终止点(x,x): , i ); scanf(%d,%d, v1,v2); /*输入边的起始顶点和终止顶点在数组中的编号*/ f

文档评论(0)

dajuhyy + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档