数据结构试验报告DFS和BFS算法Word文档下载推荐.docx
《数据结构试验报告DFS和BFS算法Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《数据结构试验报告DFS和BFS算法Word文档下载推荐.docx(11页珍藏版)》请在冰豆网上搜索。
![数据结构试验报告DFS和BFS算法Word文档下载推荐.docx](https://file1.bdocx.com/fileroot1/2023-1/9/172cd68e-feda-41d6-a356-c651e51668b0/172cd68e-feda-41d6-a356-c651e51668b01.gif)
(可以在键盘输入边的信息以构建一个无向图。
以(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、各专业可在满足学校对实验教学基本要求的前提下,根据专业特点自行设计实验报告的格式,所设
计的实验报告在使用前需交实践教学管理科备案。