ImageVerifierCode 换一换
格式:DOCX , 页数:16 ,大小:119.24KB ,
资源ID:4277618      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/4277618.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数据结构的图的广度优先搜索实验报告郭治民.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

数据结构的图的广度优先搜索实验报告郭治民.docx

1、数据结构的图的广度优先搜索实验报告郭治民深 圳 大 学 实 验 报 告 课程名称: 数据结构实验与课程设计 实验项目名称: 图的广度优先搜索 学院: 计算机与软件学院 专业: 计算机科学与技术 * * 报告人:郭治民 学号:* 班级: 3 实验时间: 2012-11-05 实验报告提交时间: 2012-11-06 教务部制一、实验目的与要求:1、实验目的 掌握图结构的说明、创建以及图的存储表示(邻接表) 掌握队列的定义、插入、删除、清空、判空方式 掌握广度优先搜索算法原理 掌握广度优先搜索算法的编程实现方法2、实验要求 熟悉C+语言编程熟悉队列的操作原理图的存储表示熟悉广度优先搜索算法原理熟练

2、使用C+语言,实现广度优先搜索算法二、实验内容:1、问题描述 给定一个结点(始点),从它开始,对(连通)图中其它结点进行广度优先搜索。2、图的广度优先搜索算法 所有顶点访问标志visited设置为FALSE,从某顶点v0开始,访问v0,visitedv0=TRUE,将v0插入队列Q(1)如果队列Q不空,则从队列Q头上取出一个顶点v,否则结束(2)依次找到顶点v的所有相邻顶点v,如果visitedv=TRUE(3)重复(1),(2)3、输入 第一行:样本顶点个数,假设为n 第二行,n个顶点(用空格隔开) 第三行,图中边(或弧)的数目 第四行开始,每一行是边(弧)的两个顶点(用空格隔开)4、输入样

3、本5、输出 广度优先搜索的顶点序列(用空格隔开,回车前无空格)6、输出样本三、实验步骤与过程:1、图的定义2、找到顶点字符在邻接表中对应的序号3、将一个新的边插入到邻接表中4、创建图的邻接表5、显示邻接表6、队列定义7、清空队列8、在队列中插入一个数据元素9、在队列中删除一个数据元素10、判断队列是否为空11、图的广度优先搜索函数12、主函数代码:#include stdio.h#include stdlib.htypedef char DataType;#define MaxSize 100#define MaxVertices 10#define MaxEdges 100#define M

4、axWeight 10000typedef struct DataType listMaxSize; int size;SeqList;typedef struct DataType queueMaxSize; int rear; int front; int count;SeqCQueue;typedef struct int row; int col; int weight;RowColWeight;typedef struct SeqList Vertices; int edgeMaxVerticesMaxVertices; int numOfEdges;AdjMGraph;/顺序表初始

5、化void ListInitiate(SeqList *L) L-size=0;/顺序表插入函数int ListInsert(SeqList *L,int i,DataType x) int j; if (L-size=MaxSize) printf (顺序表已满无法插入!n); return 0; else if (iL-size) printf (参数i不合法!n); return 0; else for (j=L-size;ji;j-) L-listj=L-listj-1; L-listi=x; L-size+; return 1; /图G初始化void Initiate(AdjMGra

6、ph *G,int n) int i,j; for (i=0;in;i+) for (j=0;jedgeij=0; else G-edgeij=MaxWeight; G-numOfEdges=0;/边的条数数置为0 ListInitiate(&G-Vertices);/顺序表初始化/在图G中插入结点vertexvoid InsertVertex(AdjMGraph *G,DataType vertex) ListInsert(&G-Vertices,G-Vertices.size,vertex);/在图G中插入边void InsertEdge(AdjMGraph *G,int v1,int v

7、2,int weight) if (v1G-Vertices.size|v2G-Vertices.size) printf (参数v1或v2越界出错!n); exit(1); G-edgev1v2=weight; G-numOfEdges+;/在图G中寻找序号为v的结点的第一个邻接结点int GetFirstVex(AdjMGraph G,int v) int col; if (vG.Vertices.size) printf (参数v1越界出错!n); exit(1); for (col=0;col0&G.edgevcolMaxWeight) return col; return -1;/在

8、图G中寻找v1结点的邻接结点v2的下一个邻接结点int GetNextVex(AdjMGraph G,int v1,int v2) int col; if (v1G.Vertices.size|v2G.Vertices.size) printf (参数v1或v2越界出错!n); exit(1); for (col=v2+1;col0&G.edgev1colMaxWeight) return col; return -1;/在图G中插入n个结点信息V和e条边信息E(创图函数)void CreatGraph(AdjMGraph *G,DataType V,int n,RowColWeight E,

9、int e) int i,k; Initiate(G,n); for (i=0;in;i+) InsertVertex(G,Vi); for (k=0;krear=0; Q-front=0; Q-count=0;/队列非空int QueueNotEmpty (SeqCQueue Q) if (Q.count!=0) return 1; else return 0;/入队列int QueueAppend(SeqCQueue *Q,DataType x) if(Q-rear+1)%MaxSize = Q-front) printf(队列已满!n); exit(1); Q-queueQ-rear =

10、x; Q-rear = (Q-rear+1)%MaxSize; Q-count+; return 1;/出队列int QueueDelete(SeqCQueue *Q,DataType *x) if(Q-front = Q-rear) printf(队列是空的!n); exit(1); *x = Q-queueQ-front; Q-front = (Q-front+1)%MaxSize; Q-count-; return 1;/图的广度优先遍历函数/连通图G以v为初始点访问操作为Visit()的广度优先遍历/数组visited标记了相应结点是否已访问过,0表示未访问,1表示已访问void Br

11、oadFSearch(AdjMGraph G,int v,int visited,void Visit(DataType item) DataType u,w; SeqCQueue queue; Visit(G.Vertices.listv); visitedv=1; QueueInitiate(&queue); QueueAppend(&queue,v); while (QueueNotEmpty(queue) QueueDelete(&queue,&u); w=GetFirstVex(G,u); while(w!=-1) if (!visitedw) Visit(G.Vertices.li

12、stw); visitedw=-1; QueueAppend(&queue,w); w=GetNextVex(G,u,w); /非连通图G访问操作为Visit()的广度优先遍历void BroadFirstSearch(AdjMGraph G,void Visit(DataType item) int i; int *visited=(int *)malloc(sizeof(int)*G.Vertices.size); for (i=0;iG.Vertices.size;i+) visitedi=0; for(i=0;iG.Vertices.size;i+) if (!visitedi) Br

13、oadFSearch(G,i,visited,Visit); free(visited);/定义访问操作的函数void Visit(DataType item) printf ( %c ,item);/主函数void main(void) AdjMGraph g1; DataType a=1,2,3,4,5;/图的结点 RowColWeight rcw=0,1,1,0,2,1,0,3,1,0,4,1,1,0,1,1,3,1,2,0,1,2,4,1,3,0,1,3,1,1,4,0,1,4,2,1; int n=5,e=12; int i,j; CreatGraph(&g1,a,n,rcw,e);

14、/创图函数 printf (结点集合为: n); for (i=0;ig1.Vertices.size;i+) printf ( %c ,g1.Vertices.listi); printf (n); printf (n); printf (权值集合为: n); for (i=0;ig1.Vertices.size;i+) for (j=0;jg1.Vertices.size;j+) printf (%5d ,g1.edgeij); printf (n); printf (n广度优先搜索序列为:n); BroadFirstSearch(g1,Visit); printf (n);四、实验结果及数据处理分析: 1、结果截图2、结果分析 因为输入样本和输出样本与结果截图一样,程序又能运行,所以结果正确。五、实验结论: 在实验中遇到一些概念模糊的知识点,并且这次的实验课堂没教,是老师在实验课上刚教的,因为坐的远,没看清听懂,所以很难写好,很多知识点都是靠旁边的同学指导和帮助完成的,所以下次一定要预习好。指导教师批阅意见:成绩评定: 指导教师签字: 年 月 日备注:注:1、报告内的项目或内容设置,可根据实际情况加以调整和补充。 2、教师批改学生实验报告时间应在学生提交实验报告时间后10日内。

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

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