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

上传人:b****3 文档编号:3066662 上传时间:2022-11-17 格式:DOCX 页数:23 大小:89.19KB
下载 相关 举报
数据结构实验图的基本操作.docx_第1页
第1页 / 共23页
数据结构实验图的基本操作.docx_第2页
第2页 / 共23页
数据结构实验图的基本操作.docx_第3页
第3页 / 共23页
数据结构实验图的基本操作.docx_第4页
第4页 / 共23页
数据结构实验图的基本操作.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

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

《数据结构实验图的基本操作.docx》由会员分享,可在线阅读,更多相关《数据结构实验图的基本操作.docx(23页珍藏版)》请在冰豆网上搜索。

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

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

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

课程名称数据结构

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

学生姓名专业班级学号

实验成绩指导老师(签名)日期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

 

typedefcharVertexType;//顶点的名称为字符

constintMaxVertexNum=10;//图的最大顶点数

constintMaxEdgeNum=100;//边数的最大值

typedefintWeightType;//权值的类型

constWeightTypeMaxValue=32767;//权值的无穷大表示

typedefVertexTypeVexlist[MaxVertexNum];//顶点信息,定点名称

typedefWeightTypeAdjMatrix[MaxVertexNum][MaxVertexNum];//邻接矩阵

typedefenum{DG,DN,AG,AN}GraphKind;//有向图,有向网,无向图,无向网

typedefstruct{

Vexlistvexs;//顶点数据元素

AdjMatrixarcs;//二维数组作邻接矩阵

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

GraphKindkind;//图的种类标志

}MGraph;

 

voidCreateGraph(MGraph&G,GraphKindkd)//采用数组邻接矩阵表示法,构造图G

{//构造有向网G

inti,j,k,q;

charv,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<<"vertexERROR!

";exit

(1);}

for(j=0;j

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

if(j==G.vexnum){cerr<<"vertexERROR!

";exit

(1);}

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

{

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

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

}

elseif(kd==DN)//有向网

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

elseif(kd==AG)//无向图

{

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

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

}

else//有向图

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

//getchar();

}

}//CreateGraph

/*注意输入格式,按以下方式输入

构造有向网

输入要构造的网的顶点数和弧数:

4,5

依次输入网的顶点名称ABCD...等等:

abcd

按照:

尾顶点名->头顶点名,权值输入数据:

如A->B,23

a->b,5

a->c,8

c->b,7

a->d,4

d->c,3

输出邻接矩阵

∞|5|8|4|

∞|∞|∞|∞|

∞|7|∞|∞|

∞|∞|3|∞|

Pressanykeytocontinue

*/

 

voidPrintMGraph(MGraph&G)

{

inti,j;

switch(G.kind)

{

caseDG:

for(i=0;i

{

for(j=0;j

printf("%2.d|",G.arcs[i][j]);

printf("\n");

}

break;

caseDN:

for(i=0;i

{

for(j=0;j

if(G.arcs[i][j]!

=MaxValue)printf("%2.d|",G.arcs[i][j]);

elseprintf("∞|");

}

printf("\n");

}

break;

caseAG:

for(i=0;i

{

for(j=0;j

printf("%2.d|",G.arcs[i][j]);

}

printf("\n");

}

break;

caseAN:

//********完成构造无向网****************

/*请模仿编写无向网*/

for(i=0;i

{

for(j=0;j

if(G.arcs[i][j]!

=MaxValue)printf("%2.d|",G.arcs[i][j]);

elseprintf("∞|");

}

printf("\n");

}

break;

}

}

//*****************完成函数**********************************

voidcountdig(MGraphG)//请完成计算图的入度或初度

{

if(G.kind==DG||G.kind==DN)

{

//计算有向图或网的各个顶点的入度与出度

intoutD,inD;

inti,j;

for(i=0;i

outD=inD=0;

for(j=0;j

if(G.arcs[i][j]!

=0&&G.arcs[i][j]!

=MaxValue)

outD++;

}

for(j=0;j

if(G.arcs[j][i]!

=0&&G.arcs[j][i]!

=MaxValue)

inD++;

}

printf("%c:

出度是%d,入度是%d\n",G.vexs[i],outD,inD);

}

 

}

else

{

//计算无向图或网的度

inti,j;

intDu;

for(i=0;i

Du=0;

for(j=0;j

if(G.arcs[i][j]!

=0&&G.arcs[i][j]!

=MaxValue)

Du++;

}

printf("%c的度是%d\n",G.vexs,Du);

}

}

}

//************参照p265设计深度有限搜索***********

voidDFSMatrix(MGraphG,inti,intn,bool*visited)

{

cout<

visited[i]=true;

for(intj=0;j

if(G.arcs[i][j]!

=0&&G.arcs[i][j]!

=MaxValue&&!

visited[j])

DFSMatrix(G,j,n,visited);

}

//************参照p268设计广度有限搜索***********

voidBFSMatrix(MGraphG,inti,intn,bool*visited)

{

constintMaxSize=30;

intq[MaxSize]={0};

intfront=0,rear=0;

cout<

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 法律文书 > 调解书

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1