图的两种遍历.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
实验名称 实验要求 算法分析 测试调节 代码附录 名称: 图的遍历 要求: 对给定图,实现图的深度优先遍历和广度优先遍历。 [基本要求]    以邻接表为存储结构,实现连通无向图的深度优先和广度优先遍历。以用户指定的结点为起点,分别输出每种遍历下的结点访问序列。 算法分析: /* 图的深度优先遍历的基本思想就是: 首相要创建图; 创建一个无向的邻接表图(即链式) 因此,就要对链表的结点进行定义(即图的邻接域和链域) 建好之后就是进行深度优先遍历(采用的是递归的思想) 在遍历的过程中定义一个数组,用于标记是否访问过。 总之,大概的思路就是这些!! */ #includestdio.h #includestdlib.h #define Max_VertexNum 100 typedef enum{FALSE,TRUE} Boolean; Boolean visited[Max_VertexNum];//访问标志向量 /*邻接表结点*/ typedef struct node{ int adjvex; /*邻接点域*/ struct node *next;/*链域*/ }EdgeNode; /*顶点结点*/ typedef struct vnode{ int vertex; //顶点域 EdgeNode *firstedge; //边头指针 }VertexNode; typedef VertexNode Adjlist[Max_VertexNum];//定义一个邻接表的数组,用于存放顶点的信息 /*图的定义*/ typedef struct ALGraph{ Adjlist 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;i=G-n;i++) { printf(请输入顶点的信息: ); printf(\n); scanf(%d,G-adjlist[i].vertex); G-adjlist[i].firstedge=NULL; } for(k=0;kG-e;k++) { printf(请输入边(vi,vj)的顶点对序号: ); printf(\n); scanf(%d%d,i,j); s=(EdgeNode*)malloc(sizeof(EdgeNode)); s-adjvex=j; s-next=G-adjlist[i].firstedge; G-adjlist[i].firstedge=s; s=(EdgeNode*)malloc(sizeof(EdgeNode)); s-adjvex=i; s-next=G-adjlist[j].firstedge; G-adjlist[j].firstedge=s; } } //////////////////////////////////////////////////////////////////////////////////////////////////////////////// /*深度优先遍历*/ void DFS(Graph *G,int i) { EdgeNode *p; printf(您所访问的顶点为: %d,G-adjlist[i].vertex); //访问顶点 printf(\n); visited[i]=TRUE; //标志已经访问过的 p=G-adjlist[i].firstedge; while(p) { if(!visited[p-adjvex]) { DFS(G,p-adjvex); p=p-next; } else { p=p-next; } } } //对图进行深度优先遍历入口 void DFSTravel(Graph *G) { int i; for(i=1;i=G-n;i++) { visited[i]=FALSE; } for(i=1;i=G-n;i++) { if(!visited[i]) { DFS(G,i); } } } void PrintAdjlist(Graph *G) { int i; EdgeNode *p; for(i=1;i=G-n;i++) { printf(%d:%d,i,G-adjlist[i].vertex); for(p

文档评论(0)

yurixiang1314 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档