DS选1迷宫求解Word格式.docx

上传人:b****4 文档编号:16444327 上传时间:2022-11-23 格式:DOCX 页数:11 大小:103.88KB
下载 相关 举报
DS选1迷宫求解Word格式.docx_第1页
第1页 / 共11页
DS选1迷宫求解Word格式.docx_第2页
第2页 / 共11页
DS选1迷宫求解Word格式.docx_第3页
第3页 / 共11页
DS选1迷宫求解Word格式.docx_第4页
第4页 / 共11页
DS选1迷宫求解Word格式.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

DS选1迷宫求解Word格式.docx

《DS选1迷宫求解Word格式.docx》由会员分享,可在线阅读,更多相关《DS选1迷宫求解Word格式.docx(11页珍藏版)》请在冰豆网上搜索。

DS选1迷宫求解Word格式.docx

个人实验

【实验设备与环境】

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%)

总分:

教师签字:

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

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

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

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