图结构试验实验报告Word下载.docx

上传人:b****4 文档编号:16407222 上传时间:2022-11-23 格式:DOCX 页数:25 大小:89.51KB
下载 相关 举报
图结构试验实验报告Word下载.docx_第1页
第1页 / 共25页
图结构试验实验报告Word下载.docx_第2页
第2页 / 共25页
图结构试验实验报告Word下载.docx_第3页
第3页 / 共25页
图结构试验实验报告Word下载.docx_第4页
第4页 / 共25页
图结构试验实验报告Word下载.docx_第5页
第5页 / 共25页
点击查看更多>>
下载资源
资源描述

图结构试验实验报告Word下载.docx

《图结构试验实验报告Word下载.docx》由会员分享,可在线阅读,更多相关《图结构试验实验报告Word下载.docx(25页珍藏版)》请在冰豆网上搜索。

图结构试验实验报告Word下载.docx

第i个结点与其他结点如果相连则为1,无连接则为0,数据之间用空格隔开(完成)

以此类推输入下一个示例(完成)

Output

每行输出一个图的深度优先搜索结果,结点编号之间用空格隔开(完成)

ProblemB:

DS图遍历--广度优先搜索

以此类推输入下一个示例

每行输出一个图的广度优先搜索结果,结点编号之间用空格隔开(完成)

Contest1638-DS实验09--最短路径【11.19】

DS图应用--最短路径

给出一个图的邻接矩阵,再给出指定顶点v0,求顶点v0到其他顶点的最短路径(完成)

第i个结点与其他结点如果相连则为1,无连接则为0,数据之间用空格隔开

第四行输入v0,表示求v0到其他顶点的最短路径距离(完成)

每行输出v0到某个顶点的最短距离和最短路径(完成)

每行格式:

v0编号-其他顶点编号----[最短路径],具体请参考示范数据(完成)

二、主要思路与方法:

1.对于本次实验,说明你认为最重要的函数、算法或知识点,并谈谈你对它们的理解

从0开始连续获取邻接结点,然后逐个遍历并设Visit为true避免重复遍历

首先将该顶点的邻接顶点全部入队,然后挨个读取,在读取的过程中继续将邻接矩阵入队,并把已经读取过的顶点全被设为true。

①输入mx矩阵

Mx

1

2

3

4

5

7

15

②初始化并赋值Matrix的矩阵

Matrix

③初始化并赋值path的矩阵

Path

-1

④初始化并赋值dist数组

Dist

⑤初始并赋值len数组

Len

⑥i=1的时候;

min=9999;

v=1;

min=5;

final[1]=true;

可以访问。

Dist[2]=5+Matrix[1][2]=10;

[2]=[1];

Path数组改变

Dist数组改变

10

⑦v=3;

min=7;

final[3]=true;

Dist[2]=7+Matrix[3][2]=9;

[2]=[3];

9

⑧v=2;

min=9;

final[2]=true;

Dist[4]=9+Matrix[2][4]=10;

[4]=[2];

6

三.实验程序或内容:

1.针对每一项实验要求,给出编写的代码,

2.可以粘贴全部代码,或者可以只粘贴重要的代码(为了节省纸张),但代码必须完整,至少是完整的函数。

3.代码符合以下要求,评分更高:

a.排版整齐,可读性高

b.代码有注释,越详细越清晰越好

#include<

iostream>

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;

++i<

MaxLen;

for(j=-1;

++j<

Matrix[i][j]=0;

Vexnum;

Matrix[i][j]=mx[i][j];

}

DFSTraverse()

intv;

//将所有的Visit赋值为false

for(v=-1;

++v<

Visit[v]=false;

//开始逐个遍历未访问结点

{

if(!

Visit[v])

DFS(v);

}//if

}//for

cout<

<

endl;

DFS(intv)

intw,i,k;

Visit[v]=true;

//输出访问的结点

v<

"

"

;

//初始化AdjVex

int*AdjVex=newint[Vexnum];

AdjVex[i]=-1;

//开始遍历这个顶点能到达的邻接顶点

k=0;

if(Matrix[v][i])

//把这个顶点的邻接顶点赋值给AdjVex

AdjVex[k++]=i;

}//for

//开始逐个遍历邻接结点,此处用了递归,会把将要遍历的结点的Visit赋值为true

i=0;

for(;

w=AdjVex[i++],w!

=-1;

Visit[w])

DFS(w);

delete[]AdjVex;

intmain()

intt,n,i,j;

Mapm;

cin>

>

t;

while(t--)

n;

intmx[20][20];

mx[i][j];

m.SetMatrix(n,mx);

m.DFSTraverse();

}

return0;

}

queue>

voidBFSTraverse();

voidBFS(intv);

BFSTraverse()

BFS(0);

BFS(intv)

intw,u;

inti,k;

queue<

int>

Q;

Visit[i]=false;

Q.push(v);

while(!

Q.empty())

u=Q.front();

Q.pop();

if(Matrix[u][i])

Visit[w]=true;

w<

Q.push(w);

}//for

}//while

m.BFSTraverse();

constintMaxDist=9999;

voidShortestPath_DIJ(intv0);

SetMatrix(intvnum,intmx[MaxLen][MaxLen]){//给矩阵赋值

//定点数量赋值

//先给所有的矩阵初始化为9999

Matrix[i][j]=MaxDist;

//把mx矩阵的内容赋给Matrix

if(mx[i][j])

ShortestPath_DIJ(intv0)

inti,j,v,w,min;

int*dist=newint[Vexnum];

bool*final=newbool[Vexnum];

intpath[MaxLen][MaxLen];

intlen[MaxLen];

//给final初始化为false,将Matrix指定行的值赋给dist

//path数组全部赋值为-1

){

final[i]=false;

dist[i]=Matrix[v0][i];

path[i][j]=-1;

//如果dist中的值小于9999的话

//path指定列赋值为v0

//path的左上右下对角线赋值为v

//指定顶点的长度赋值为Vexnum

//path的作用是一个顶点有一行,这一行里从左到右表示依次到达的结点

//例如第二行下标为1

//0231表示从0到2到3到1

//若为最终结果即为从0到1的所有路径中的最短路径

//0行则没必要标出了。

//path的赋值是从列开始的

//这个时候dist[0]=9999

if(dist[v]<

MaxDist){

path[v][v0]=v0;

path[v][v]=v;

}

len[v]=Vexnum;

//dist指定位置的值赋值为0

//v0设置为已经访问

dist[v0]=0;

final[v0]=true;

//最小值等于9999

//判断是否未访问

//若未访问,如果dist[w]小于最小值,就记录w和dist[w],分别赋给v和min

//v位置为最小值的位置,设定为true

//如果final[w]未访问且最小值加上矩阵vw位置的值仍然小于dist[w]

//dist[w]取值min+Matrix[v][w]

//然后领把v行的path值赋给w行

//在w行末尾加个w

//w行的长度等于v行加1

for(i=0;

){//跳过0

//找到dist中的未被标记为true的最小值,然后标记为true,然后遍历邻接结点

min=MaxDist;

for(w=-1;

++w<

{if(!

final[w])

if(dist[w]<

min){v=w;

min=dist[w];

}//if

final[v]=true;

){

//min+Matrix[v][w]<

dist[w]有这个判断的原因是

//比如我想从A点到B点,它的权值为30

//但是我从A点先到C点,再到B点,它的权值和为25

//那这样的话明显是先经过C点再到B点这个路径更好

//!

final[w]是遍历其余的为遍历过的结点,避免与上一个已访问过的结点遍历

final[w]&

&

(min+Matrix[v][w]<

dist[w])){

dist[w]=min+Matrix[v][w];

len[v];

//赋值的原因是从这个路径path[v](0-XXX-v)再到(w)能获得更短的路径

path[w][j]=path[v][j];

//在行尾加上当前结点,即从(0-XXX-v-w)

path[w][j]=w;

len[w]=len[v]+1;

}//if

//输出

if(i!

=v0)

v0<

-"

i<

dist[i]<

---["

if(path[i][j]!

=-1)

path[i][j]<

]"

delete[]dist;

delete[]final;

inti,j,k,t;

intvnum,v0;

intmx[MaxLen][MaxLen];

MapmyMap;

for(k=0;

k<

k++){

i++)

for(j=0;

j<

j++)

mx[i][j]=0;

vnum;

myMap.SetMatrix(vnum,mx);

v0;

myMap.ShortestPath_DIJ(v0);

四、实验结论:

1、根据你完成的每个实验要求,给出相应的实验结果图,并结合图来解析运行过程

2、如果运行过程简单,只要贴出VC运行的结果图。

3、如果无结果图,有网站的判定结果,贴出相应结果

SampleInput

0011

1101

1110

00011

00100

01011

10100

SampleOutput

0213

03214

Pr

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

当前位置:首页 > 表格模板 > 合同协议

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

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