免费预览已结束,剩余4页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
实验名称实验要求算法分析测试调节代码附录名称: 图的遍历要求:对给定图,实现图的深度优先遍历和广度优先遍历。基本要求以邻接表为存储结构,实现连通无向图的深度优先和广度优先遍历。以用户指定的结点为起点,分别输出每种遍历下的结点访问序列。算法分析:/*图的深度优先遍历的基本思想就是:首相要创建图;创建一个无向的邻接表图(即链式)因此,就要对链表的结点进行定义(即图的邻接域和链域)建好之后就是进行深度优先遍历(采用的是递归的思想)在遍历的过程中定义一个数组,用于标记是否访问过。总之,大概的思路就是这些!*/#include#include#define Max_VertexNum 100typedef enumFALSE,TRUE Boolean;Boolean visitedMax_VertexNum;/访问标志向量/*邻接表结点*/typedef struct nodeint adjvex; /*邻接点域*/struct node *next;/*链域*/EdgeNode;/*顶点结点*/typedef struct vnodeint vertex; /顶点域EdgeNode *firstedge; /边头指针VertexNode;typedef VertexNode AdjlistMax_VertexNum;/定义一个邻接表的数组,用于存放顶点的信息/*图的定义*/typedef struct ALGraphAdjlist adjlist;int n,e;/图的顶点和边Graph;/*创建一个无向图*/void CreateGraph(Graph *G)int i,j,k;EdgeNode *s;printf(请输入图的顶点数和边数: );scanf(%d %d,&G-n,&G-e);/*对顶点数组进行初始化*/for(i=1;in;i+)printf(请输入顶点的信息: );printf(n);scanf(%d,&G-adjlisti.vertex);G-adjlisti.firstedge=NULL;for(k=0;ke;k+)printf(请输入边(vi,vj)的顶点对序号: );printf(n);scanf(%d%d,&i,&j);s=(EdgeNode*)malloc(sizeof(EdgeNode);s-adjvex=j;s-next=G-adjlisti.firstedge;G-adjlisti.firstedge=s;s=(EdgeNode*)malloc(sizeof(EdgeNode);s-adjvex=i;s-next=G-adjlistj.firstedge;G-adjlistj.firstedge=s;/*深度优先遍历*/void DFS(Graph *G,int i)EdgeNode *p;printf(您所访问的顶点为: %d,G-adjlisti.vertex); /访问顶点printf(n);visitedi=TRUE; /标志已经访问过的p=G-adjlisti.firstedge;while(p)if(!visitedp-adjvex)DFS(G,p-adjvex);p=p-next; elsep=p-next;/对图进行深度优先遍历入口void DFSTravel(Graph *G)int i;for(i=1;in;i+)visitedi=FALSE;for(i=1;in;i+) if(!visitedi)DFS(G,i);void PrintAdjlist(Graph *G)int i;EdgeNode *p;for(i=1;in;i+)printf(%d:%d,i,G-adjlisti.vertex);for(p=G-adjlisti.firstedge;p;p=p-next)printf(%d,p-adjvex);printf(n);void main(void)Graph G;CreateGraph(&G);PrintAdjlist(&G);DFSTravel(&G);/*广度优先遍历*/#include#include#define Max_VertexNum 100typedef enumFALSE,TRUE Boolean;Boolean visitedMax_VertexNum;/访问标志向量/*队列的链式存储结构*/typedef struct qnodeint data;struct qnode *next;Qnode;typedef struct queueQnode *front; /头指针Qnode *rear; /尾指针Queue;/*表结点*/typedef struct nodeint adjvex;struct node *next;EdgeNode;/*顶点结点*/typedef struct vnodeint vertex;EdgeNode *firstedge;VertexNode;typedef VertexNode AdjlistMax_VertexNum;/定义一个邻接表的数组/*图的定义*/typedef struct ALGraphAdjlist adjlist;int n,e;/图的顶点和边Graph;/*创建一个无向图*/void CreateGraph(Graph *G)int i,j,k;EdgeNode *s;printf(请输入图的顶点数和边数: );scanf(%d %d,&G-n,&G-e);/*对顶点数组进行初始化*/for(i=1;in;i+)printf(请输入顶点的信息: );printf(n);scanf(%d,&G-adjlisti.vertex);G-adjlisti.firstedge=NULL;for(k=0;ke;k+)printf(请输入边(vi,vj)的顶点对序号: );printf(n);scanf(%d%d,&i,&j);s=(EdgeNode*)malloc(sizeof(EdgeNode);s-adjvex=j;s-next=G-adjlisti.firstedge;G-adjlisti.firstedge=s;s=(EdgeNode*)malloc(sizeof(EdgeNode);s-adjvex=i;s-next=G-adjlistj.firstedge;G-adjlistj.firstedge=s;/*初始化队列*/void InitQueue(Queue *q)q-front=q-rear=NULL;/*队列判空*/int EmpQueue(Queue *q)return(q-front=NULL&q-rear=NULL);/*出队列*/int DeQueue(Queue *q)Qnode *p;int data;if(EmpQueue(q)printf(队列为空!); /下溢exit(1);p=q-front; /保存q-front=q-front-next; /删除data=p-data; /取出队列元素/*如果原队列中只有一个结点,删除后,队列为空。此时头指针已经为空*/if(q-rear=p)q-rear=NULL;free(p);return data;/*顶点入队列*/void EnQueue(Queue *q,int a)Qnode *p;p=(Qnode*)malloc(sizeof(Qnode);p-data=a;p-next=NULL;if(EmpQueue(q)q-front=q-rear=p;elseq-rear-next=p;q-rear=p; /p此时变为队尾/*广度优先遍历*/void BFS(Graph *G,int k)int i;Queue Q; /定义一个队列EdgeNode *p;InitQueue(&Q); /初始化队列printf(您访问的顶点为: %d,G-adjlistk.vertex);visitedk=TRUE;EnQueue(&Q,k);while(!EmpQueue(&Q)i=DeQueue(&Q);p=G-adjlisti.firstedge;/依次搜索vi的邻接点vjwhile(p)if(!visitedp-adjvex)printf(您访问的顶点为: %d,G-adjlistp-adjvex.vertex);visitedp-adjvex=TRUE;EnQueue(&Q,p-adjvex);p=p-next;void BFSTravel(Graph *G)int i;for(i=1;in;i+)visitedi=FALSE;for(i=1;in;i+)if(!visitedi)BFS(G,i);/*输出构造的无向图*/void PrintAdjlist(Graph *G)int i;Ed
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 开题报告教师评语7
- 会计毕业论文参考选题1
- 我国B2C电子商务的物流配送模式研究-以京东商城为例
- 全生命周期成本管理的理论与案例
- 加强物资采购管理的对策和措施
- 梦旅人-浅析费里尼电影中的-魔法-
- 数学教育硕士论文题目
- 英语语言文学专业研究生培养方案(博士)
- 电子病历系统-毕业论文
- 理论研究对社会科学方法的应用与创新的推动作用分析
- 2025年少先队辅导员技能大赛考试题库(含答案)
- 辅警2025面试题目和答案
- 如何开好班前班后会培训
- 韩国留学生HSK六级考试书信写作错误分析
- 《大数据金融》高等院校经济类专业全套教学课件
- 2025年江苏省南京市鼓楼区中考一模英语试题及答案
- 2025年中国螺杆真空泵行业市场前景预测及投资价值评估分析报告
- 船舶运营中的风险识别与预防措施
- (高清版)DG∕TJ 08-2289-2019 全方位高压喷射注浆技术标准
- 转学代办协议书模板
- 大副航海英语试题及答案
评论
0/150
提交评论