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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

数据结构图的遍历实验报告.docx

1、数据结构图的遍历实验报告实验项目名称: 图的遍历 一、实验目的 应用所学的知识分析问题、解决问题,学会用建立图并对其进行遍历,提高实际编程能力及程序调试能力。二、实验内容 问题描述:建立有向图,并用深度优先搜索和广度优先搜素。输入图中节点的个数和边的个数,能够打印出用邻接表或邻接矩阵表示的图的储存结构。三、实验仪器与设备 计算机,Code:Blocks。四、实验原理 用邻接表存储一个图,递归方法深度搜索和用队列进行广度搜索,并输出遍历的结果。5、实验程序及结果#define INFINITY 10000 /*无穷大*/#define MAX_VERTEX_NUM 40#define MAX 4

2、0#include#include#include#includetypedef struct ArCellint adj; ArCell,AdjMatrixMAX_VERTEX_NUMMAX_VERTEX_NUM;typedef struct char name20; infotype;typedef struct infotype vexsMAX_VERTEX_NUM;AdjMatrix arcs;int vexnum,arcnum;MGraph;int LocateVex(MGraph *G,char* v) int c = -1,i;for(i=0;ivexnum;i+)if(strc

3、mp(v,G-vexsi.name)=0) c=i; break;return c;MGraph * CreatUDN(MGraph *G)/初始化图,接受用户输入int i,j,k,w;char v120,v220;printf(请输入图的顶点数,弧数:);scanf(%d%d,&G-vexnum,&G-arcnum);printf(结点名字:n);for(i=0;ivexnum;i+)printf(No.%d:,i+1);scanf(%s,G-vexsi.name);for(i=0;ivexnum;i+)for(j=0;jvexnum;j+)G-arcsij.adj=INFINITY;pr

4、intf(请输入一条边依附的两个顶点和权值:n);for(k=0;karcnum;k+)printf(第%d条边:n,k+1); printf(起始结点:);scanf(%s,v1); printf(结束结点:);scanf(%s,v2); /printf(边的权值:); /scanf(%d,&w);i=LocateVex(G,v1); j=LocateVex(G,v2);if(i=0&j=0)/G-arcsij.adj=w;G-arcsji=G-arcsij;return G;int FirstAdjVex(MGraph *G,int v)int i;if(v=0 & vvexnum) /v

5、合理for(i=0;ivexnum;i+)if(G-arcsvi.adj!=INFINITY)return i;return -1;void VisitFunc(MGraph *G,int v)printf(%s ,G-vexsv.name);int NextAdjVex(MGraph *G,int v,int w)int k;if(v=0 & vvexnum & w=0 & wvexnum)/v,w合理for( k=w+1;kvexnum;k+)if(G-arcsvk.adj!=INFINITY)return k;return -1;int visitedMAX;void DFS(MGrap

6、h *G,int v)/从第v个顶点出发递归地深度优先遍历图Gint w;visitedv=1;VisitFunc(G,v);/访问第v个结点for(w=FirstAdjVex(G,v);w=0;w=NextAdjVex(G,v,w)if(!visitedw)DFS(G,w);printf(%d ,G-arcsvw);void DFSTraverse(MGraph *G,char *s)/深度优先遍历int v,k;for(v=0;vvexnum;v+)visitedv=0;k=LocateVex(G,s);if(k=0&kvexnum)for(v=k;v=0;v-)if(!visitedv)

7、DFS(G,v);for(v=k+1;vvexnum;v+)if(!visitedv)DFS(G,v);typedef struct Qnodeint vexnum;struct Qnode *next;QNode,*QueuePtr;typedef structQueuePtr front;QueuePtr rear;LinkQueue;int InitQueue(LinkQueue *Q)Q-front=Q-rear=(QueuePtr)malloc(sizeof(QNode);if(!Q-front)exit(0);Q-front-next=NULL;return 1;void EnQu

8、eue(LinkQueue *Q,int a )QueuePtr p;p=(QueuePtr)malloc(sizeof(QNode);if(!p)exit(0);p-vexnum=a;p-next=NULL;Q-rear-next=p;Q-rear=p;int DeQueue(LinkQueue *Q,int *v) QueuePtr p;if(Q-front=Q-rear)printf(结点不存在!n);exit(0);p=Q-front-next;*v=p-vexnum;Q-front-next=p-next;if(Q-rear=p)Q-front=Q-rear;return *v;in

9、t QueueEmpty(LinkQueue *Q)if(Q-rear=Q-front)return 0;return 1;int VisitedMAX;void BFSTraverse(MGraph *G,char *str)/广度优先遍历int w,u,v,k;LinkQueue Q,q;for(v=0;vvexnum;v+) Visitedv=0;InitQueue(&Q);InitQueue(&q);k=LocateVex(G,str);for(v=k;v=0;v-)if(!Visitedv)Visitedv=1;VisitFunc(G,v);EnQueue(&Q,v);/v入队whi

10、le(!QueueEmpty(&Q)DeQueue(&Q,&u);/出队for(w=FirstAdjVex(G,u);w=0;w=NextAdjVex(G,u,w)if(!Visitedw)Visitedw=1;VisitFunc(G,v);EnQueue(&Q,w);for(v=k+1;vvexnum;v+)if(!Visitedv)Visitedv=1;VisitFunc(G,v);EnQueue(&Q,v);/v入队while(!QueueEmpty(&Q)DeQueue(&Q,&u);/出队for(w=FirstAdjVex(G,u);w=0;w=NextAdjVex(G,u,w)if

11、(!Visitedw)Visitedw=1;VisitFunc(G,v);EnQueue(&Q,w);void main()MGraph *G,b;char v10;G=CreatUDN(&b);printf(请输入起始结点名称:);scanf(%s,v);printf(n深度优先遍历:n);DFSTraverse(G,v);printf(n广度优先遍历:n);BFSTraverse(G,v);getch();6、实验总结实验要求输入图中节点的个数和边的个数,能够打印出用邻接表或邻接矩阵表示的图的储存结构。在设计中其中用邻接表表示的节点的值只能是数字,但用邻接矩阵表示的节点的值可以是字母。但用邻接表形式要相对简单一些。深度优先采取的递归思想。首先,将从起点,沿某条边,顺势遍历下去,直到不能继续遍历下去。这时,又从起点的另一结点开始,遍历下去。如此往复,知道将所有结点遍历完。 广度优先得使用队列。首先,将起点入队,并标为已访问。进入循环,当队列不为空时,出队,输出,并将与出队的元素相邻的且未访问的结点全部放入队列,标为已访问。一次循环,只有一个结点出队,大于等于0个结点入队。 实验程序中大量使用了循环,使时间复杂度加大了很多,因此此程序比较适合于密集图,应用于稀疏图中就有点浪费时间了。

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

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