图结构试验实验报告.docx
《图结构试验实验报告.docx》由会员分享,可在线阅读,更多相关《图结构试验实验报告.docx(24页珍藏版)》请在冰豆网上搜索。
图结构试验实验报告
附件(四)
深圳大学实验报告
课程名称:
数据结构实验与课程设计
实验项目名称:
图结构实验
学院:
计算机与软件学院
专业:
指导教师:
报告人:
学号:
班级:
实验时间:
实验报告提交时间:
教务处制
一、实验目得与完成说明:
1、简单介绍本实验得主要目得
2、说明您自己在本次实验中完成了第几项要求(必填)
Contest1620-DS实验08--图遍历【11、12】
ProblemA:
DS图遍历--深度优先搜索
Description
主要目得:
给出一个图得邻接矩阵,对图进行深度优先搜索,从顶点0开始(完成)
注意:
图n个顶点编号从0到n-1
Input
第一行输入t,表示有t个测试实例(完成)
第二行输入n,表示第1个图有n个结点(完成)
第三行起,每行输入邻接矩阵得一行,以此类推输入n行(完成)
第i个结点与其她结点如果相连则为1,无连接则为0,数据之间用空格隔开(完成)
以此类推输入下一个示例(完成)
Output
每行输出一个图得深度优先搜索结果,结点编号之间用空格隔开(完成)
ProblemB:
DS图遍历--广度优先搜索
Description
给出一个图得邻接矩阵,对图进行深度优先搜索,从顶点0开始(完成)
注意:
图n个顶点编号从0到n-1
Input
第一行输入t,表示有t个测试实例(完成)
第二行输入n,表示第1个图有n个结点(完成)
第三行起,每行输入邻接矩阵得一行,以此类推输入n行(完成)
第i个结点与其她结点如果相连则为1,无连接则为0,数据之间用空格隔开(完成)
以此类推输入下一个示例
Output
每行输出一个图得广度优先搜索结果,结点编号之间用空格隔开(完成)
Contest1638-DS实验09--最短路径【11、19】
ProblemA:
DS图应用--最短路径
Description
给出一个图得邻接矩阵,再给出指定顶点v0,求顶点v0到其她顶点得最短路径(完成)
Input
第一行输入t,表示有t个测试实例(完成)
第二行输入n,表示第1个图有n个结点(完成)
第三行起,每行输入邻接矩阵得一行,以此类推输入n行(完成)
第i个结点与其她结点如果相连则为1,无连接则为0,数据之间用空格隔开
第四行输入v0,表示求v0到其她顶点得最短路径距离(完成)
以此类推输入下一个示例
Output
每行输出v0到某个顶点得最短距离与最短路径(完成)
每行格式:
v0编号-其她顶点编号----[最短路径],具体请参考示范数据(完成)
二、主要思路与方法:
1、对于本次实验,说明您认为最重要得函数、算法或知识点,并谈谈您对它们得理解
Contest1620-DS实验08--图遍历【11、12】
ProblemA:
DS图遍历--深度优先搜索
从0开始连续获取邻接结点,然后逐个遍历并设Visit为true避免重复遍历
ProblemB:
DS图遍历--广度优先搜索
首先将该顶点得邻接顶点全部入队,然后挨个读取,在读取得过程中继续将邻接矩阵入队,并把已经读取过得顶点全被设为true。
Contest1638-DS实验09--最短路径【11、19】
ProblemA:
DS图应用--最短路径
①输入mx矩阵
Mx
0
1
2
3
4
0
0
5
0
7
15
1
0
0
5
0
0
2
0
0
0
0
1
3
0
0
2
0
0
4
0
0
0
0
0
②初始化并赋值Matrix得矩阵
Matrix
0
1
2
3
4
0
∞
5
∞
7
15
1
∞
∞
5
∞
∞
2
∞
∞
∞
∞
1
3
∞
∞
2
∞
∞
4
∞
∞
∞
∞
∞
③初始化并赋值path得矩阵
Path
0
1
2
3
4
0
-1
-1
-1
-1
-1
1
0
1
-1
-1
-1
2
-1
-1
-1
-1
-1
3
0
-1
-1
3
-1
4
0
-1
-1
-1
4
④初始化并赋值dist数组
Dist
0
1
2
3
4
∞
5
∞
7
15
⑤初始并赋值len数组
Len
0
1
2
3
4
5
5
5
5
5
⑥i=1得时候;
min=9999;v=1;min=5;final[1]=true;
可以访问。
Dist[2]=5+Matrix[1][2]=10;
[2]=[1];
Path数组改变
Path
0
1
2
3
4
5
0
-1
-1
-1
-1
-1
1
0
1
-1
-1
-1
2
0
1
-1
-1
-1
2
3
0
-1
-1
3
-1
4
0
-1
-1
-1
4
Dist数组改变
Dist
0
1
2
3
4
∞
5
10
7
15
⑦v=3;min=7;final[3]=true;
可以访问。
Dist[2]=7+Matrix[3][2]=9;[2]=[3];
Path数组改变
Path
0
1
2
3
4
5
0
-1
-1
-1
-1
-1
1
0
1
-1
-1
-1
2
0
-1
-1
3
-1
2
3
0
-1
-1
3
-1
4
0
-1
-1
-1
4
Dist数组改变
Dist
0
1
2
3
4
∞
5
9
7
15
⑧v=2;min=9;final[2]=true;
可以访问。
Dist[4]=9+Matrix[2][4]=10;[4]=[2];
Path数组改变
Path
0
1
2
3
4
5
6
0
-1
-1
-1
-1
-1
1
0
1
-1
-1
-1
2
0
-1
-1
3
-1
2
3
0
-1
-1
3
-1
4
0
-1
-1
3
-1
2
4
Dist数组改变
Dist
0
1
2
3
4
∞
5
9
7
10
三.实验程序或内容:
1、针对每一项实验要求,给出编写得代码,
2、可以粘贴全部代码,或者可以只粘贴重要得代码(为了节省纸张),但代码必须完整,至少就是完整得函数。
3、代码符合以下要求,评分更高:
a、排版整齐,可读性高
b、代码有注释,越详细越清晰越好
Contest1620-DS实验08--图遍历【11、12】
ProblemA:
DS图遍历--深度优先搜索
#include
usingnamespacestd;
constintMaxLen=20;
classMap{
private:
boolVisit[MaxLen];
intMatrix[MaxLen][MaxLen];
intVexnum;
voidDFS(intv);
public:
voidSetMatrix(intvnum,intmx[MaxLen][MaxLen]);
voidDFSTraverse();
};
//设置邻接矩阵
voidMap:
:
SetMatrix(intvnum,intmx[MaxLen][MaxLen])
{
inti,j;
Vexnum=vnum;
for(i=-1;++ifor(j=-1;++jMatrix[i][j]=0;
for(i=-1;++ifor(j=-1;++jMatrix[i][j]=mx[i][j];
}
voidMap:
:
DFSTraverse()
{
intv;
//将所有得Visit赋值为false
for(v=-1;++vVisit[v]=false;
//开始逐个遍历未访问结点
for(v=-1;++v{
if(!
Visit[v])
{
DFS(v);
}//if
}//for
cout<}
voidMap:
:
DFS(intv)
{
intw,i,k;
Visit[v]=true;
//输出访问得结点
cout<//初始化AdjVex
int*AdjVex=newint[Vexnum];
for(i=-1;++iAdjVex[i]=-1;
//开始遍历这个顶点能到达得邻接顶点
k=0;
for(i=-1;++i{
if(Matrix[v][i])
{
//把这个顶点得邻接顶点赋值给AdjVex
AdjVex[k++]=i;
}//if
}//for
//开始逐个遍历邻接结点,此处用了递归,会把将要遍历得结点得Visit赋值为true
i=0;
for(;w=AdjVex[i++],w!
=-1;)
{
if(!
Visit[w])
{
DFS(w);
}//if
}//for
delete[]AdjVex;
}
intmain()
{
intt,n,i,j;
Mapm;
cin>>t;
while(t--)
{
cin>>n;
intmx[20][20];
for(i=-1;++ifor(j=-1;++jcin>>mx[i][j];
m、SetMatrix(n,mx);
m、DFSTraverse();
}
return0;
}
ProblemB:
DS图遍历--广度优先搜索
#include
#include
usingnamespacestd;
constintMaxLen=20;
classMap{
private:
boolVisit[MaxLen];
intMatrix[MaxLen][MaxLen];
intVexnum;
voidDFS(intv);
public:
voidSetMatrix(intvnum,intmx[MaxLen][MaxLen]);
voidDFSTraverse();
voidBFSTraverse();
voidBFS(intv);
};
//设置邻接矩阵
voidMap:
:
SetMatrix(intvnum,