DS选1迷宫求解Word格式.docx
- 文档编号:16444327
- 上传时间:2022-11-23
- 格式:DOCX
- 页数:11
- 大小:103.88KB
DS选1迷宫求解Word格式.docx
《DS选1迷宫求解Word格式.docx》由会员分享,可在线阅读,更多相关《DS选1迷宫求解Word格式.docx(11页珍藏版)》请在冰豆网上搜索。
个人实验
【实验设备与环境】
PC机,WindowsXP操作系统,VC++6.0开发环境。
【数据结构及函数定义】
(1)主函数main()实现初始化操作,完成对子函数的调用
voidmain()
{inti,m,n,cycle=0;
while(cycle!
=(-1))
{
printf("
欢迎使用迷宫求解程序\n"
);
设计者:
张安\n"
*手动生成迷宫请按:
1\n"
);
*自动生成迷宫请按:
2\n"
*退出请按:
3\n\n"
\n"
请选择你的操作:
scanf("
%d"
&
i);
switch(i)
{case1:
printf("
\n请输入行数:
"
scanf("
m);
printf("
请输入列数:
n);
while((m<
=0||m>
39)||(n<
=0||n>
39))
{printf("
\n抱歉,你输入的行列数超出预设范围(0-39,0-39),请重新输入:
\n\n"
请输入行数:
}
shoudong_maze(m,n);
print_maze(m,n);
mgpath(maze,m,n);
if(X!
=0)result_maze(m,n);
\n\nPressEnterContiue!
getchar();
while(getchar()!
='
\n'
break;
case2:
zidong_maze(m,n);
case3:
cycle=(-1);
default:
你的输入有误!
\nPressEnterContiue!
}
}
(2)子函数
voidshoudong_maze(intm,intn)//手动生成迷宫函数
voidzidong_maze(intm,intn)//自动生成迷宫函数
voidzidong_maze(intm,intn)//将迷宫打印成图形
voidresult_maze(intm,intn)//若存在迷宫路径就打印迷宫路径函数
voidenqueue(structpointp)//入队列函数
structpointdequeue()//出队列函数
intis_empty()//判断队列是否为空函数
voidvisit(introw,intcol,intmaze[41][41])//访问节点函数
intmgpath(intmaze[41][41],intm,intn)//搜索路径函数
【测试数据与实验结果】
(请用截图的方式展示实验结果,并辅以必要的文字说明)
(1)选择1手动生成迷宫:
(2)选择2自动生成迷宫:
【源程序清单】
(请附上源程序)
……………………………………
源程序:
#include"
stdlib.h"
stdio.h"
#defineN39
#defineM39
intX;
intmaze[N+2][M+2];
structpoint{
introw,col,predecessor;
}queue[512];
inthead=0,tail=0;
voidshoudong_maze(intm,intn){
inti,j;
请按行输入迷宫,0表示通路,1表示障碍:
for(i=0;
i<
m;
i++)
for(j=0;
j<
n;
j++)
scanf("
maze[i][j]);
voidzidong_maze(intm,intn){
\n迷宫生成中……\n\n"
system("
pause"
maze[i][j]=rand()%2;
//由于rand()产生的随机数是从0到RAND_MAX
//RAND_MAX是定义在stdlib.h中的,其值至少为32767)
//要产生从X到Y的数,只需要这样写:
k=rand()%(Y-X+1)+X;
voidprint_maze(intm,intn){
\n迷宫生成结果如下:
迷宫入口\n"
↓"
{printf("
for(j=0;
j++)
{if(maze[i][j]==0)printf("
□"
if(maze[i][j]==1)printf("
■"
→迷宫出口\n"
voidresult_maze(intm,intn){
迷宫通路(用☆表示)如下所示:
\n\t"
{if(maze[i][j]==0||maze[i][j]==2)printf("
if(maze[i][j]==3)printf("
☆"
voidenqueue(structpointp){
queue[tail]=p;
tail++;
structpointdequeue(){
head++;
returnqueue[head-1];
intis_empty(){
returnhead==tail;
voidvisit(introw,intcol,intmaze[41][41]){
structpointvisit_point={row,col,head-1};
maze[row][col]=2;
enqueue(visit_point);
intmgpath(intmaze[41][41],intm,intn){
X=1;
structpointp={0,0,-1};
if(maze[p.row][p.col]==1)
{printf("
此迷宫无解\n\n"
X=0;
return0;
maze[p.row][p.col]=2;
enqueue(p);
while(!
is_empty())
{p=dequeue();
if((p.row==m-1)&
&
(p.col==n-1))break;
if((p.col+1<
n)&
(maze[p.row][p.col+1]==0))visit(p.row,p.col+1,maze);
if((p.row+1<
m)&
(maze[p.row+1][p.col]==0))visit(p.row+1,p.col,maze);
if((p.col-1>
=0)&
(maze[p.row][p.col-1]==0))visit(p.row,p.col-1,maze);
if((p.row-1>
(maze[p.row-1][p.col]==0))visit(p.row-1,p.col,maze);
if(p.row==m-1&
p.col==n-1)
迷宫路径为:
(%d,%d)\n"
p.row,p.col);
maze[p.row][p.col]=3;
while(p.predecessor!
=-1)
{p=queue[p.predecessor];
else{printf("
此迷宫无解!
return0;
voidmain()
欢迎使用迷宫求解程序\n"
张安\n"
1\n"
2\n"
3\n\n"
【实验后总结与体会】
该实验内容丰富,所涉及到的知识面很广,我通过查阅多种书籍经过一周时间的准备并读过很多别人写的关于迷宫求解的程序,才勉强完成了这一份实验报告,当然这使我受益匪浅,虽然这花费了我很多的时间在这上面,但我并不亏,因为我又见了许多关于栈的操作,加深了对知识的巩固和理解。
上课纪律(20%)
实验过程及结果(40%)
实验报告质量(40%)
总分:
教师签字:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DS 迷宫 求解