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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

数据结构实验十一:图实验.doc

1、一,实验题目实验十一:图实验采用邻接表存储有向图,设计算法判断任意两个顶点间手否存在路径。 二,问题分析本程序要求采用邻接表存储有向图,设计算法判断任意两个顶点间手否存在路径,完成这些操作需要解决的关键问题是:用邻接表的形式存储有向图并输出该邻接表。用一个函数实现判断任意两点间是否存在路径。1, 数据的输入形式和输入值的范围:输入的图的结点均为整型。2, 结果的输出形式:输出的是两结点间是否存在路径的情况。3, 测试数据:输入的图的结点个数为:4 输入的图的边得个数为:3 边的信息为:1 2, 2 3,3 1 三,概要设计(1)为了实现上述程序的功能,需要:A,用邻接表的方式构建图B,深度优先

2、遍历该图的结点C,判断任意两结点间是否存在路径(2)本程序包含6个函数:a,主函数main()b,用邻接表建立图函数create_adjlistgraph()c,深度优先搜索遍历函数 dfs()d,初始化遍历数组并判断有无通路函数 dfs_trave()e,输出邻接表函数 print()f,释放邻接表结点空间函数 freealgraph()各函数间关系如右图所示:create_adjlistgraph()dfs()dfs_trave()main()print()freealgraph()四,详细设计(1)邻接表中的结点类型定义:typedef struct arcnode int adjvex

3、; arcnode *nextarc; arcnode;(2)邻接表中头结点的类型定义:typedef struct char vexdata; arcnode *firstarc; adjlist;(3)邻接表类型定义:typedef struct adjlist vexticesmax; int vexnum,arcnum; algraph;(4)深度优先搜索遍历函数伪代码:int dfs(algraph *alg,int i,int n) arcnode *p; visitedi=1; p=alg-vexticesi.firstarc; while(p!=NULL) if(visited

4、p-adjvex=0)if(p-adjvex=n) flag=1; dfs(alg,p-adjvex,n); if(flag=1) return 1; p=p-nextarc; return 0; (5)初始化遍历数组并判断有无通路函数伪代码:void dfs_trave(algraph *alg,int x,int y)int i; for(i=0;ivexnum;i+) visitedi=0; dfs(alg,x,y); 五,源代码#include stdio.h #include stdlib.h #include malloc.h #define max 100 typedef str

5、uct arcnode /定义邻接表中的结点类型 int adjvex; /定点信息 arcnode *nextarc; /指向下一个结点的指针nextarcarcnode; typedef struct /定义邻接表中头结点的类型 char vexdata; /头结点的序号 arcnode *firstarc; /定义一个arcnode型指针指向头结点所对应的下一个结点adjlist; typedef struct /定义邻接表类型 adjlist vexticesmax; /定义表头结点数组 int vexnum,arcnum; /定点个数和弧的个数algraph; algraph *cr

6、eate_adjlistgraph() /建立邻接表函数 int n,e,i,j,k; arcnode *p; /定义一个邻接表结点型指针变量p algraph *al; /定义邻接表表头结点指针al al=(algraph *)malloc(sizeof(algraph); /为邻接表结点申请空间 printf(请输入节点数:n); scanf(%d,&n); /输入结点数 for(i=0;ivexticesi.vexdata=(char)i; /给头结点赋值 al-vexticesi.firstarc=NULL; /初始化头结点 printf(请输入边数:n); scanf(%d,&e);

7、 /输入边得数目 printf(请输入弧的信息:n); for(i=0;iadjvex=k; /将k赋值给新申请的结点 p-nextarc=al-vexticesj.firstarc; /使新结点指向该头结点所指向的下一个结点 al-vexticesj.firstarc=p; /使头结点指向新结点 al-vexnum=n; /将顶点数n给al-vexnum al-arcnum=e; /将边数e给al-arcnum return al; /返回该邻接表 void print(algraph *alg) /输出邻接表 int i; arcnode *p; /定义一个邻接表结点型指针变量p prin

8、tf(该图的邻接表输出为:n); for(i=1;ivexnum;i+) /当在结点个数范围内时 printf(%d-,alg-vexticesi.vexdata); /输出i头结点的值 p=alg-vexticesi.firstarc; /把i头结点所指的第一个结点给p while(p!=NULL) /当p不为空时 printf(%d-,p-adjvex); /输出给结点 p=p-nextarc; /p指向下一个结点 printf(-n); void freealgraph(algraph *alg) /释放邻接表结点空间函数 int i; arcnode *p,*q; /定义两个邻接表结点

9、型指针变量p,q for(i=0;ivexnum;i+) /当结点个数不超出范围时 p=alg-vexticesi.firstarc; /p指向i头结点所对应的第一个结点 while(p!=NULL) /当p不为空时 q=p-nextarc; /q指向p的下一个结点 free(p); /释放p p=q; /将q赋给p int visitedmax; /定义深度优先搜索遍历数组 int flag=0; /设置标志,用来判断两点间是否为通路int dfs(algraph *alg,int i,int n) /深度优先搜索遍历函数arcnode *p; /定义邻接表结点类型指针pvisitedi=1

10、; /将顶点i设置为已访问p=alg-vexticesi.firstarc; /使p指向i头结点所指的第一个结点 while(p!=NULL) /当p不为空时if(visitedp-adjvex=0) /如果p结点未被访问if(p-adjvex=n) /如果n=p结点的值flag=1; /则将标志位设置为1 dfs(alg,p-adjvex,n); /递归调用深度优先搜索遍历函数if(flag=1) /如果已被访问return 1; /则返回1 p=p-nextarc; /p指向下一个结点 return 0; void dfs_trave(algraph *alg,int x,int y) /初始化遍历数组并判断有无通路函数int i; for(i=0;ivexnum;i+) visitedi=0; dfs(alg,x,y); int main() /主函数 int m,n; algraph *alg; alg=create_adjlistgraph(); /创建图 print(alg); /输出该图 printf(请输入任意要判定有无通路的两个顶点(输入(-1 -1)时退出):); scanf(%d%d,&m,&n); while(m!=-1&n!=-1) dfs_tra

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

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