- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据图Word文档2
课程名称 数据结构实验 成绩
实验项目 图 指导教师 曹东燕
学生姓名 董晓亚 学号 201000802080 班级专业 电子信息工程
实验地点 综合楼236 实验日期 2012年12月15日
实习七 图
一、实习目的
熟悉图的两种常用的存储结构,以及在这两种存储结构上的两种遍历图的方法,即深度优先遍历和广度优先遍历。进一步掌握递归算法的设计方法。
关于各种典型著名的复杂算法,在上机实习方面不做基本要求。更适合于安排大型课程设计。
二、实习题
阅读理解上面第一个关于图的邻接矩阵的程序,做下列题目。
根据教科书P157页的G2图(无向图),输入数据运行程序。
再适当修改上述程序,使它适用于G1图(有向图),输入数据运行程序。
提示:无向图的邻接矩阵是对称的,而有向图的邻接矩阵是非对称的。
继续修改程序使之可以表示存储以下网(边上带权值的图)。
提示:城市名暂时用代号(1,2,……)表示,在程序中以数组的下标表示城市名。
它的邻接矩阵如下:
2. 调试运行上面第二个程序,即图的邻接链表存储的程序。解决下列问题。
根据教科书P157页的G2图(无向图),输入数据运行程序。
再适当修改程序使它适用于G1图(有向图),输入数据运行程序。
提示:有向图的邻接链表分为正邻接链表和逆邻接链表。
3. 设计一个程序,建立图的邻接矩阵,并且进行图的深度优先遍历。结合第2题的图运行调试程序。
图的一章中由各种典型、著名的复杂算法,在上机练习方面不做基本要求。更适合于安排大型课程设计。学生只要彻底搞清基本概念、基本存储结构,经过努力是可以完成的。
三、程序及运行结果
无向图程序:
# include stdio.h
# include stdlib.h
# define MAX 20
typedef int VexType;
typedef VexType Mgraph[MAX][MAX]; /* Mgraph是二维数组类型标识符 */
/* 函数原形声明 */
void creat_mg(Mgraph G);
void out_mg(Mgraph G);
Mgraph G1; /* G1是邻接矩阵的二维数组名 */
int n,e,v0;
/* 主函数 */
void main()
{ creat_mg(G1); out_mg(G1);
}/* main */
/* 建立邻接矩阵 */
void creat_mg(Mgraph G)
{ int i,j,k;
printf(\n n,e=?); scanf(%d,%d, n,e); /* 输入顶点数n,边数e */
for(i=1; i=n;i++)
for(j=1;j=n;j++) G[i][j]=0;
/* 如果是网,G[i][j]=0该为G[i][j]=32767(无穷)*/
for(k=1;k=e;k++) /* 组织边数的循环 */
{ printf(\n vi,vj=?);
scanf(%d,%d, i,j); /* 输入一条边的两个顶点编号i,j */
G[i][j]=1; G[j][i]=1; /* 无向图的邻接矩阵是对称矩阵 */
/* 如果是网,还要输入边的权值w,再让G[i][j]=w */
}
} /* creat_mg */
/* 邻接矩阵简单输出,为了检查输入是否正确 */
void out_mg(Mgraph G)
{ int i,j; char ch;
for(i=1; i=n;i++) /* 矩阵原样输出 */
{ printf(\n );
for(j=1;j=n;j++) printf(%5d,G[i][j]);
}
/* 输出所存在的边 */
for(i=1; i=n;i++)
for(j=1;j=n;j++)
if(G[i][j]==1)printf(\n 存在边 %d,%d ,i,j);
printf
文档评论(0)