当前位置:文档之家› ___《数据结构》课程实验报告(实验5——图的存储方式和应用)参考答案

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

___《数据结构》课程实验报告(实验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<n。

i++)
printf("%6d",GV[i]);
printf("\n");
for(i=0.i<n。

i++)
printf("%6d",GV[i]);
for(j=0.j<n。

j++)
if(GA[i][j]==MaxValue)
printf("%6s","∞");
else
printf("%6d",GA[i][j]);
printf("\n");
该函数将邻接矩阵输出到控制台。

注意,我们需要将给定图的顶点从开始连续编号,以便与数组下标对应。

例如,顶点1和顶点2之间的边,边的起点和终点序号输入0 1即可。

实验结果:
测试用例1无向无权图如下图所示。

程序运行结果如下:
测试用例2有向有权图如下图所示。

程序运行结果如下:
实验小结:本次实验中,我们研究了如何使用邻接矩阵来存储图,并实现了相应的输入和输出函数。

在实现过程中,需要注意将顶点从开始连续编号,以便与数组下标对应。

相关主题