一个走迷宫的程序 电脑资料.docx

上传人:b****8 文档编号:9153143 上传时间:2023-02-03 格式:DOCX 页数:7 大小:15.63KB
下载 相关 举报
一个走迷宫的程序 电脑资料.docx_第1页
第1页 / 共7页
一个走迷宫的程序 电脑资料.docx_第2页
第2页 / 共7页
一个走迷宫的程序 电脑资料.docx_第3页
第3页 / 共7页
一个走迷宫的程序 电脑资料.docx_第4页
第4页 / 共7页
一个走迷宫的程序 电脑资料.docx_第5页
第5页 / 共7页
点击查看更多>>
下载资源
资源描述

一个走迷宫的程序 电脑资料.docx

《一个走迷宫的程序 电脑资料.docx》由会员分享,可在线阅读,更多相关《一个走迷宫的程序 电脑资料.docx(7页珍藏版)》请在冰豆网上搜索。

一个走迷宫的程序 电脑资料.docx

一个走迷宫的程序电脑资料

一个走迷宫的程序电脑资料

本文给出一个c语言版的走迷宫的程序,

1.迷宫的表示。

迷宫用结构体MATRIX来表示

包括迷宫矩阵

迷宫的宽,迷宫的高,

迷宫入口的坐标,迷宫出口的坐标。

结构体定义如下:

typedefstruct_step

{

intx;//行坐标

inty;//列坐标

}STEP;

typedefstruct____trix

{

intdata[MAX_WIDTH+2][MAX_WIDTH+2];//迷宫数据,0:

表示有路,1:

表示墙

intwidth;//矩阵(迷宫)的宽,包括最左和最有2堵墙

intheight;//矩阵(迷宫)的宽,包括顶部和底部2堵墙

STEPentran___;//迷宫入口

STEPexit;//迷宫出口

}MATRIX;

迷宫矩阵的每一个元素可以是0或1,0表示可走,1表示是墙,走不通。

为了便于检查是否越界,即坐标超过迷宫的范围。

在迷宫的4个边增加了全1数据,表示4堵墙,这样,在任何时候,都不会越界。

下面的数据表示1个5×5的迷宫,增加了4堵墙后,实际宽度和高度变为7,迷宫变成1个7×7的矩阵

1,1,1,1,1,1,1,

1,0,0,0,0,0,1,

1,1,0,1,0,1,1,

1,0,0,1,1,1,1,

1,0,1,0,0,0,1,

1,0,0,0,1,0,1,

1,1,1,1,1,1,1,

2.算法

走迷宫的路径的每一步可用二元组(x,y)来表示。

已经走过的路径放入数组path。

首先,将入口的坐标放入数组,此时path数组的元素个数为1.

接下来使用下面的规则,试图找到一条出路

1.从当前位置(即数组的最后一个元素),从右,下,左,上四个方向搜索,看能否走通。

如果可找到一条通路,则

将新的位置的坐标放入path数组,数组长度加1.

如果新的位置的坐标等于出口的坐标,搜索结束。

如果从各个方向都走不通,则

将迷宫当前位置的元素置为1,这样,当前点就变成墙,下次就不会走到这个位置了。

并将数组的最有一个元素丢弃,数组长度减1

如果数组的长度为0,没有任何路径可以走通,搜索结束。

全部的代码见下:

[cpp]viewplaincopy

#include

#include

#include

#include

#defineMAX_WIDTH30

#defineMAX_HEIGHT30

typedefstruct_step

{

intx;//行坐标

inty;//列坐标

}STEP;

typedefstruct____trix

{

intdata[MAX_WIDTH+2][MAX_WIDTH+2];//迷宫数据,0:

表示有路,1:

表示墙

intwidth;//矩阵(迷宫)的宽,包括最左和最有2堵墙

intheight;//矩阵(迷宫)的宽,包括顶部和底部2堵墙

STEPentran___;//迷宫入口

STEPexit;//迷宫出口

}MATRIX;

MATRIXg____trix=//初始化为一个迷宫,程序也能从文件中读入迷宫数据

{

{

{1,1,1,1,1,1,1},

{1,0,0,0,0,0,1},

{1,1,0,1,0,1,1},

{1,0,0,1,1,1,1},

{1,0,1,0,0,0,1},

{1,0,0,0,1,0,1},

{1,1,1,1,1,1,1},

},

7,7,//7行,7列,包括4堵墙

{1,1},//入口坐标

{5,5}//出口坐标

};

staticSTEPs_shift[]=

{

{1,0},//向右走,x++,y不变

{0,1},//向下走,x不变,y++

{-1,0},//向左走,x--,y不变

{0,-1}//向上走,x不变,y--

};

voidprint_paths(STEPpath[],intpath_len)//打印走迷宫的路径

{

inti;

for(i=0;i

{

if(i>0)

printf("->");

printf("(%d,%d)",path[i].x,path[i].y);

}

}

voidprint_Matrix(MATRIX*pMatrix)//打印迷宫数据,迷宫数据包含4堵墙

{

inti,j;

for(i=0;iheight;i++)

{

for(j=0;jwidth;j++)

{

if(j!

=0)

printf("");

printf("%d",pMatrix->data[i][j]);

}

printf("\n");

}

}

intsearch_path(int___tric[MAX_WIDTH+2][MAX_WIDTH+2],

STEPpath[],intpath_len,STEPexit)

{

while

(1)

{

inti,bFind;

STEPnewPos;

for(bFind=0,i=0;i

{

newPos.x=path[path_len-1].x+s_shift[i].x;

newPos.y=path[path_len-1].y+s_shift[i].y;

if(path_len==1)

{

if(g____trix.data[newPos.x][newPos.y]==0)

{

bFind=1;break;//找到一个位置

}

}

//path[path_len-1]表示当前位置,path[path_len-2]表示上一步的位置,

//如果新的位置等于上一个位置,将陷入循环,故要求新的位置不能是上一步的位置

elseif((newPos.x!

=path[path_len-2].x||newPos.y!

=path[path_len-2].y)&&g____trix.data[newPos.x][newPos.y]==0)

{

bFind=1;break;//找到一个位置

}

}

if(bFind)

{

path[path_len++]=newPos;//将新的位置追加到path数组,路径长度+1

if(newPos.x==exit.x&&newPos.y==exit.y)

returnpath_len;

}

else

{

___tric[path[path_len-1].x][path[path_len-1].y]=1;//从当前位置,无路可走,将当前位置标记为墙

 

模板,内容仅供参考

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

当前位置:首页 > 解决方案 > 学习计划

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

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