数据结构试验报告DFS和BFS算法Word文档下载推荐.docx

上传人:b****6 文档编号:19876879 上传时间:2023-01-11 格式:DOCX 页数:11 大小:68.80KB
下载 相关 举报
数据结构试验报告DFS和BFS算法Word文档下载推荐.docx_第1页
第1页 / 共11页
数据结构试验报告DFS和BFS算法Word文档下载推荐.docx_第2页
第2页 / 共11页
数据结构试验报告DFS和BFS算法Word文档下载推荐.docx_第3页
第3页 / 共11页
数据结构试验报告DFS和BFS算法Word文档下载推荐.docx_第4页
第4页 / 共11页
数据结构试验报告DFS和BFS算法Word文档下载推荐.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

数据结构试验报告DFS和BFS算法Word文档下载推荐.docx

《数据结构试验报告DFS和BFS算法Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《数据结构试验报告DFS和BFS算法Word文档下载推荐.docx(11页珍藏版)》请在冰豆网上搜索。

数据结构试验报告DFS和BFS算法Word文档下载推荐.docx

(可以在键盘输入边的信息以构建一个无向图。

以(a,b)的形式输入边的信息;

对此无向图进行深度优先搜索,并输出正确的序列。

四、源代码

#include<

stdio.h>

stdlib.h>

#defineMax20

intvisited[Max];

structqueue//队列的结构体

{

int*head;

//指向所申请得到的空间的首地址

int*front;

//头指针,若队列不为空,指向队列头元素

int*rear;

//尾指针,若队列不空,指向队列尾元素的下一个位置

intstacksize;

//当前已分配的存储空间

}s;

//------------图的数组存储表示-------------

structMgraph

charvexs[Max];

intarcs[Max][Max];

'

intvexnum,arcnum;

}G;

G中的位置intLocatevex(charv)//确定v在{

inti,t;

for(i=0;

i<

G.vexnum;

i++)

if(G.vexs[i]==v)t=i;

return(t);

}

G-------------//-----------采用数组表示法,构造无向图voidCreateUDG()

inti,j,k;

charv1,v2;

);

请输入顶点数和弧数:

牰湩晴尨scanf(%d,%d,&

G.vexnum,&

G.arcnum);

fflush(stdin);

\n,G.vexnum);

个顶点牰湩晴尨请输入%d

%d:

i);

请输入顶点牰湩晴尨

scanf(%c,&

G.vexs[i]);

for(j=0;

j<

j++)G.arcs[i][j]=0;

\n,G.arcnum);

%d条弧牰湩晴尨请输入for(k=0;

k<

G.arcnum;

k++)

k);

请输入弧牰湩晴尨scanf(%c,%c,&

v1,&

v2);

i=Locatevex(v1);

j=Locatevex(v2);

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

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

-------------------v返回的第一个邻接顶点//--------------intFirstadjvex(intv)

inti;

for(i=0;

if(G.arcs[v][i]==1)return(i);

i=-1;

return(i);

----------------------w的)下一个邻接顶点的(相对于//----------返回vintNextadjvex(intv,intw)

if(G.arcs[v][i]==1&

&

i>

w)return(i);

G---------------个顶点出发递归地深度优先遍历图//--------从第vvoidDFS(intv)

intw;

visited[v]=1;

printf(%c,G.vexs[v]);

for(w=Firstadjvex(v);

w>

=0;

w=Nextadjvex(v,w))

if(!

visited[w])DFS(w);

--------------作深度优先遍历对图G//-----------------voidDfstraverse()

i++)visited[i]=0;

牰湩晴尨深度优先遍历:

visited[i])DFS(i);

printf(\

s构造一个空队列voidInitqueue()//{

s.head=(int*)malloc(Max*sizeof(int));

存储分配失败if(!

s.head)exit(0);

//s.front=s.rear=s.head;

s.stacksize=Max;

s的新的队尾元素voidEnqueue(inte)//插入元素e为{

if(s.rear-s.head+1>

=s.stacksize)

队列满,追加存储空间{//s.head=(int*)realloc(s.head,(s.stacksize+10)*sizeof(int));

if(!

//存储分配失败

s.stacksize+=10;

*s.rear=e;

s.rear+=1;

的队头元素若队列不空,则删除svoidDequeue(intu)//{

u=*s.front;

s.front+=1;

G------------------按广度优先非递归遍历图//---------------voidBfstraverse()

intv,u=0,w;

for(v=0;

v<

v++)visited[v]=0;

Initqueue();

牰湩晴尨广度优先遍历:

v++)

visited[v])

Enqueue(v);

while(s.front!

=s.rear)

Dequeue(u);

for(w=Firstadjvex(u);

w=Nextadjvex(u,w))

visited[w])

visited[w]=1;

printf(%c,G.vexs[w]);

Enqueue(w);

voidmain()

*******************************************\n);

(printf\n);

退出广度优先搜索深度优先搜索\n3.\n4.创图printf(.\n2.printf(*******************************************\n);

请选择要操作的选项:

牰湩晴尨scanf(%d,&

i);

switch(i)

case1:

CreateUDG();

break;

case2:

Dfstraverse();

case3:

Bfstraverse();

case4:

exit(0);

main();

五、实验结果

六、思考题.图的存储方式有几种?

本实验中你会采用什么样的存储方式?

1种常用存储方式。

十字链表、邻接多重表等4答:

图的存储方式有数组表示法、邻接表、本实验中我采用了数组表示法存储。

,E(G)={(v1v8},,v6,v7,,G如下:

V(G)={v1,v2,v3,v4v52、给出一幅无向图})(v2,v8(v1,v8),,v5),(v3,v6),(v3,v7),v2),(vl,v3)(v2,v4),(v2,)请画出示意图;

1)请根据你采用的存储方式画出存储图示;

2的基础上,请给出图的深度优先搜索序列;

)在题目23的基础上,请给出图的广度优先搜索序列。

)在题目24)(1解:

v4

v1v2v6

v5

v3

v8

v7

(2)

7

5623401

100000v1011

101v21

010010101010v32

0

000v4100003

0v500004

0010005

0v60001

0000006

0v71

0

0010007

1v8

abdehcfg

(3)深度优先搜索序列:

abchdefg

广度优先搜索序列:

(4)

:

一、实验目的;

二、实验原理;

三、实验步骤;

四、实验结果;

五、讨论分析、实验报告的内容注:

1(完成指定的思考题和作业题);

六、改进实验建议。

2、各专业可在满足学校对实验教学基本要求的前提下,根据专业特点自行设计实验报告的格式,所设

计的实验报告在使用前需交实践教学管理科备案。

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

当前位置:首页 > 小学教育 > 学科竞赛

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

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