采用邻接表存储结,编写一个求无向图的连通分量个数的算法.docVIP

采用邻接表存储结,编写一个求无向图的连通分量个数的算法.doc

  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文档。上传文档
查看更多
学院名称 专业班级 实验成绩 学生姓名 学号 实验日期 课程名称 数据结构 实验题目 3 图 一、实验目的与要求 熟悉图的存储结构,掌握有关算法的实现,了解图在计算机科学及其他工程技术中的应用。 二、主要仪器设备 Cfree 三、实验内容和原理 [问题描述] 采用邻接表存储结构,编写一个求无向图的连通分量个数的算法。 [输入] 图顶点的个数,和以各个顶点为弧尾的所有弧,并以-1结束输入。 [输出] 连通分量的个数。 [存储结构] 图采用邻接矩阵的方式存储。 [算法的基本思想] 用到深度优先搜索,先从任意一个顶点开始进行深度优先搜索,搜索完后,连通分量个数增1。然后再从没有遍历过的顶点找一个出来进行深度优先搜索,搜索完后,连通分量个数增1。一直到所有的顶点都被遍历过。 [参考源程序] #includestdio.h #includemalloc.h int n; struct VNode{ //顶点 int position; struct VNode* next; }; struct ArcNode{ //弧 int mark; struct VNode* first; }; void DFS(struct ArcNode* v,struct ArcNode* w){ //深度优先搜索 struct VNode* L; w-mark=1; L=w-first; while(L!=NULL){ if((v+(L-position))-mark==0){ DFS(v,(v+L-position)); //递归调用 } L=L-next; } } int main(){ int i,j,k; int num=0; struct ArcNode* p; struct VNode* temp; struct VNode* flag; printf(\n请输入顶点个数 n:); scanf(%d,n); while(n1){ printf(你输入的值不合理,请重新输入:\n); scanf(%d,n); } p=(struct ArcNode*)malloc(n*sizeof(struct ArcNode)); /*说明:1.Vi表示第i个顶点,它在表中的位置为i-1,如V3在表中的位置为2; 2.如果输入以V1为弧尾的所有弧(假设存在弧V1,V3和V1,V2) 则输入:2 1 -1(只需输入弧头的位置,并用-1表示结束)*/ for(i=0;in;i++){ //创建无向图 printf(\n请输入以V%d为弧尾的所有弧,并以-1结束输入\n,i+1); scanf(%d,k); if(k==-1){ p[i].mark=0; p[i].first=NULL; } else{ temp=(struct VNode*)malloc(sizeof(struct VNode)); temp-position=k; temp-next=NULL; p[i].first=temp; p[i].mark=0; flag=temp; scanf(%d,k); while(k!=-1){ temp=(struct VNode*)malloc(sizeof(struct VNode)); temp-position=k; temp-next=NULL; flag-next=temp; flag=temp; scanf(%d,k); } } } i=0; while(p[i].mark==0){ //计算连通分量的个数 DFS(p,(p+i)); num++; i=0; while(p[i].mark!=0in){ i++; } } printf(此图的连通分量个数为:%d\n,num); system(pause); return 0; } 五、实验结果与分析 习题1:这题主要还是用到深度优先搜索,先从任意一个顶点开始进行深度优先搜索,搜索完后,连通分量个数增1。然后再从没有遍历过的顶点找一个出来进行深度优先搜索,搜索完后,连通分量个数增1。一直到所有的顶点都被遍历过。 实验结果如图: 六、实验心得及体会 通过本次实验,我更好的掌握了图的相关操作,能够熟练的进行图的建立、遍历。 在编写程序时,有很多不明白的地方,在得到同学的鼎立相助后,基本解决了这些问题。

文档评论(0)

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

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

版权声明书
用户编号:6153235235000003

1亿VIP精品文档

相关文档