- 1、本文档共8页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
数据结构实验四.
《数据结构》实验报告
实验题目: 实验四、图
姓名: 张鑫 学号: 142054301 班级: 1420543
系名: 计算机工程系 专业: 计算机科学与技术 指导老师: 刘海静
实验时间: 2016年5月30日 实验地点: 专业软件实验室
【实验概述】
1.实验目的及要求
目的:
1.熟练掌握图的两种存储结构,邻接矩阵和邻接表的表示方法。
2.熟练掌握图的两种遍历(深度优先搜索遍历和广度优先搜索遍历)的算法思想、步骤。
3.能按Prim算法构造最小生成树。
4.了解并掌握拓扑排序、关键路径、最短路径的算法思想。
要求:
预习并掌握图的逻辑结构特点、无向图和有向图的两种存储结构表示、图的深度优先和广度优先算法思想,最小生成树的概念以及普利姆算法和克鲁斯卡尔构造最小生成树的过程。
2.实验原理
1、图的逻辑结构特点:图是一种较线性表和树更为复杂的数据结构。在图结构中,结点之间的关系可以是任意的,任意两个数据元素之间都可能相关。
2、图没有顺序存储结构。
3、图的邻接矩阵表示法:设图 A = (V, E)是一个有 n 个顶点的图, 则图的邻接矩阵是一个n行n列的二维数组Aij 。对有向图和无向图而言,数组元素或为1或为0。无向图的邻接矩阵是对称矩阵,有向图的不一定。对网来说,邻接矩阵中元素或者为两个顶点之间的边的权值,或者为无穷大。
4、图的邻接表表示法:是一种顺序分配与链式分配相结合的存储方法,它包括两部分:一部分是单链表,用来存放边/弧的信息;另一部分是数组,主要用来存放顶点本身的数据信息。对无向图而言,同一个顶点发出的边链接在同一个边链表中,每一个链结点代表一条边(边结点)。对有向图而言,通常要分为邻接表和逆邻接表。
5、图的遍历是从图中某一顶点出发访遍图中所有的顶点,且使每个顶点仅被访问一次,这一过程就叫做图的遍历 ,分为深度优先和广度优先搜索。
6、最小生成树:生成树中每条边上权值之和达到最小。最小生成树是实际应用很广泛的。构造最小生成树的经典算法有普里姆算法和克鲁斯卡尔算法。
、3.实验环境(使用的软件)
VC++6.0 【实验内容】
实验算法设计
假设有一张城市地图,图中的顶点为城市,无向边代表两个城市间的连通关系,边上的权为在这两个城市之间修建高速公路的造价,研究后发现,这个地图有一个特点,即任一对城市都是连通的。现在的问题是,要修建若干高速公路把所有城市联系起来,问如何设计可使得工程的总造价最少。
要求:
创建带有n(顶点个数由用户输入)个顶点的带权无向图。可以是邻接矩阵或者邻接表存储。
使用深度或广度优先搜索对图中顶点进行遍历输出。
2.实验过程(源代码及描述、调试过程及分析)
#include stdio.h
#includestdlib.h
#define TRUE 1
#define FALSE 0
#define Status int
#define MAX_VERTEX_NUM 8 /*顶点最大个数*/
#define VertexType char /*顶点元素类型*/
enum BOOlean {False,True};
BOOlean visited[MAX_VERTEX_NUM]; //全局变量--访问标志数组
typedef struct ArcNode
{ int adjvex; //顶点编号
struct ArcNode *nextarc;
int weight; /*边的权*/
}ArcNode; /*表结点*/
typedef struct VNode
{
VertexType data;
ArcNode *firstarc;
}VNode/*头结点*/,AdjList[MAX_VERTEX_NUM];
typedef struct
{ AdjList vertices;
int vexnum,arcnum;/*顶点的实际数,边的实际数*/
}ALGraph;
#define MAXQSIZE 100 //最大队列长度-1
typedef struct
{
int *base; // 动态分配存储空间
int front; // 若队列不空,指向队列头元素
int rear; // 若队列不空,指向队列尾元素的下
文档评论(0)