数据结构实验图的基本操作

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

浙江大学城市学院实验报告

课程名称数据结构

实验项目名称实验十三/十四图的基本操作

学生姓名专业班级学号

实验成绩指导老师(签名)日期2014/06/09

一.实验目的和要求

1、掌握图的主要存储结构。

2、学会对几种常见的图的存储结构进行基本操作。

二.实验内容

1、图的邻接矩阵定义及实现:

建立头文件test13_AdjM.h,在该文件中定义图的邻接矩阵存储结构,并编写图的初始化、建立图、输出图、输出图的每个顶点的度等基本操作实现函数。同时建立一个验证操作实现的主函数文件test13.cpp(以下图为例),编译并调试程序,直到正确运行。

2、图的邻接表的定义及实现:

建立头文件test13_AdjL.h,在该文件中定义图的邻接表存储结构,并编写图的初始化、建立图、输出图、输出图的每个顶点的度等基本操作实现函数。同时在主函数文件test13.cpp中调用这些函数进行验证(以下图为例)。

3、填写实验报告,实验报告文件取名为report13.doc。

4、上传实验报告文件report13.doc到BB。

注: 下载p256_GraphMatrix.cpp(邻接矩阵)和

p258_GraphAdjoin.cpp(邻接表)源程序,读懂程序完成空缺部分代码。

三. 函数的功能说明及算法思路

(包括每个函数的功能说明,及一些重要函数的算法实现思路)

四. 实验结果与分析

(包括运行结果截图、结果分析等)

五.心得体会

程序比较难写,但是可以通过之前的一些程序来找到一些规律

(记录实验感受、上机过程中遇到的困难及解决办法、遗留的问题、意见和建议等。)

【附录----源程序】

256:

//p-255 图的存储结构以数组邻接矩阵表示, 构造图的算法。

#include

#include

#include

#include

typedef char VertexType; //顶点的名称为字符

const int MaxVertexNum=10; //图的最大顶点数

const int MaxEdgeNum=100; //边数的最大值

typedef int WeightType; //权值的类型

const WeightType MaxValue=32767; //权值的无穷大表示

typedef VertexType Vexlist[MaxVertexNum]; //顶点信息,定点名称

typedef WeightType AdjMatrix[MaxVertexNum][MaxVertexNum]; //邻接矩阵typedef enum{DG,DN,AG,AN} GraphKind; //有向图,有向网,无向图,无向网typedef struct{

Vexlist vexs; // 顶点数据元素

AdjMatrix arcs; // 二维数组作邻接矩阵

int vexnum, arcnum; // 图的当前顶点数和弧数

GraphKind kind; // 图的种类标志

} MGraph;

void CreateGraph(MGraph &G, GraphKind kd)// 采用数组邻接矩阵表示法,构造图G

{//构造有向网G

int i,j,k,q;

char v, w;

G.kind=kd; //图的种类

printf("输入要构造的图的顶点数和弧数:\n");

scanf("%d,%d",&G.vexnum,&G.arcnum);

getchar();//过滤回车

printf("依次输入图的顶点名称ABCD...等等:\n");

for (i=0; i

getchar();//过滤回车

for (i=0; i

for (j=0; j

if(kd==DN||kd==AN)

G.arcs[i][j]=MaxValue; //网,初始值为无穷大

else

G.arcs[i][j]=0; //图,初始为0

if(kd==DN||kd==AN)

printf("按照:尾顶点名->头顶点名,权值输入数据:如A->B,23 \n");

else

printf("按照:尾顶点名->头顶点名输入数据:A->B\n");

for (k=0; k

if(kd==DN||kd==AN)

scanf("%c->%c,%d",&v,&w,&q); //输入弧的两个定点及该弧的权重else

scanf("%c->%c",&v,&w);

getchar();

for(i=0;i

if(G.vexs[i]==v) break;//查找出v在vexs[]中的位置i

if(i==G.vexnum) {cerr<<"vertex ERROR!";exit(1);}

for(j=0;j

if(G.vexs[j]==w) break;//查找出v在vexs[]中的位置j

if(j==G.vexnum) {cerr<<"vertex ERROR!";exit(1);}

if(kd==AN)//无向网

{

G.arcs[i][j]=q; //邻接矩阵对应位置置权值

G.arcs[j][i]=q; //无向图为对称矩阵

}

else if(kd==DN)//有向网

G.arcs[i][j]=q;

else if(kd==AG)//无向图

{

G.arcs[i][j]=1; //对称矩阵

G.arcs[j][i]=1;

}

else //有向图

G.arcs[i][j]=1;

// getchar();

}

相关文档
最新文档