一个走迷宫的程序 电脑资料.docx
- 文档编号:9153143
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:7
- 大小:15.63KB
一个走迷宫的程序 电脑资料.docx
《一个走迷宫的程序 电脑资料.docx》由会员分享,可在线阅读,更多相关《一个走迷宫的程序 电脑资料.docx(7页珍藏版)》请在冰豆网上搜索。
一个走迷宫的程序电脑资料
一个走迷宫的程序电脑资料
本文给出一个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;//从当前位置,无路可走,将当前位置标记为墙
模板,内容仅供参考
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 一个走迷宫的程序 电脑资料 一个 迷宫 程序 电脑 资料