___《数据结构》课程实验报告(实验5——图的存储方式和应用)参考答案

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

___《数据结构》课程实验报告(实验5—

—图的存储方式和应用)参考答案

数据结构》课程实验报告(实验5——图的存储方式和应用)

学生姓名:

班级:

学号:

指导老师:

实验成绩:

实验概述:

本次实验旨在编写程序建立图的邻接矩阵,并具有一定的通用性。通过输入图中每个结点与其他结点的关联情况,程序能自动形成邻接矩阵。

实验目的:

1.根据图中顶点和边的信息编制程序建立图的邻接矩阵。

2.程序要有一定的通用性。

实验基本原理:

为保证程序的通用性,适合各种图,在建立图的邻接矩阵算法中增加两个参数k1和k2.k1为表示无向图,否则为有向图;k2为表示边上无权,否则为边上有权。初始化邻接矩阵时,对角线元素设置为0.若图的边上有权,则其他元素值设为∞;若边上无权,则设为0.

程序代码:

实验内容:

include

define MaxVertexNum 8.//定义图的最大顶点数

define MaxEdgeNum 20.//定义图的最大边数

define MaxValue 1000.//定义相当于∞的常量值

typedef int VertexType。//定义顶点数据类型VertexType 为整型

typedef VertexType vexlist[MaxVertexNum]。//定义vexlist 为存储顶点信息的数组类型

typedef int adjmatrix[MaxVertexNum][MaxVertexNum]。//

定义adjmatrix为存储邻接矩阵的数组类型

void CreateMatrix(vexlist GV。adjmatrix GA。int n。int e。int k1.int k2)。//建立图的邻接矩阵

void ShowMatrix(vexlist GV。adjmatrix GA。int n)。//输出图的邻接矩阵

void main()

int n。e。k1.k2;

vexlist gv。//定义保存顶点信息的数组

adjmatrix ga。//定义保存邻接矩阵的数组

输入一个图的顶点数和边数

printf("输入待处理图的顶点数和边数:");

scanf("%d%d"。&n。&e);

输入有无向选择和有无权选择

printf("输入有无向选择和有无权选择(为无,非为有):");

CreateMatrix(gv。ga。n。e。k1.k2)。//建立图的邻接矩阵ShowMatrix(gv。ga。n)。//输出图的邻接矩阵

经过修改后,文章格式更加清晰,语言更加简洁明了。

scanf("%d%d%d",&i,&j,&w);

GA[i][j]=w;

首先,我们使用scanf函数输入k1和k2.然后,我们使用CreateMatrix函数建立图的邻接矩阵。最后,我们使用ShowMatrix函数输出图的邻接矩阵。

CreateMatrix函数用于输入n个顶点和e条边,建立图的邻接矩阵。其中,k1为0则为无向图,否则为有向图;k2为

0则为无权图,否则为有权图。我们首先建立顶点数组,然后

初始化图的邻接矩阵。如果是无向无权图,则输入e条无向无权边的起点和终点序号;如果是无向有权图,则输入e条无向有权边的起点和终点序号及权值;如果是有向无权图,则输入

e条有向无权边的起点和终点序号;如果是有向有权图,则输

入e条有向有权边的起点和终点序号及权值。

修正后的文章:

为了实现图的邻接矩阵存储,我们可以使用二维数组来表示。具体来说,我们可以通过输入边的起点、终点和权值来构建邻接矩阵。下面是相应的代码:

scanf("%d%d%d",&i,&j,&w);

GA[i][j]=w;

注意,对于具有n个顶点的图,其邻接矩阵为n×n阶方阵,行列下标为0~n-1.

为了输出邻接矩阵,我们可以编写如下的ShowMatrix函数:

void ShowMatrix(vexlist GV,adjmatrix GA,int n){

int i,j;

printf("顶点");

for(i=0.i

printf("%6d",GV[i]);

printf("\n");

for(i=0.i

printf("%6d",GV[i]);

for(j=0.j

if(GA[i][j]==MaxValue)

printf("%6s","∞");

else

printf("%6d",GA[i][j]);

printf("\n");

该函数将邻接矩阵输出到控制台。注意,我们需要将给定图的顶点从开始连续编号,以便与数组下标对应。例如,顶点1和顶点2之间的边,边的起点和终点序号输入0 1即可。

实验结果:

测试用例1无向无权图如下图所示。

程序运行结果如下:

测试用例2有向有权图如下图所示。

程序运行结果如下:

实验小结:本次实验中,我们研究了如何使用邻接矩阵来存储图,并实现了相应的输入和输出函数。在实现过程中,需要注意将顶点从开始连续编号,以便与数组下标对应。

相关文档
最新文档