老鼠走迷宫宫,小蜻蜓要回家,请你带它沿着迷宫路线走一走吧!

走迷宫的好处
儿子很爱走迷宫的游戏,在他两岁半时,儿子已能很熟练的走迷宫,有时还要求去书店买书,通常在那走完两本迷宫,再买一本。再后来走有立体感的迷宫。我原来给儿子买的火车玩具,带火车轨的,买来时他只时玩了玩火车,没想到有一天儿子把火车轨拿出来,拼各种各样的图型,每次都不一样。现在他能拼完整的各种图案,很多时候拼的图案很对称,每天儿子都要玩上很长时间,我家的客厅里堆着一堆,他摆好的图案,我们一般也不动,如果要收起来时,征求儿子的意见,如果他不让收我们就不收。
&昨晚儿子在翻一本拼音字母的书,那上面有笔画顺序,儿子竟然还在那上面用手描呢,而且还在另一个没有标注顺序的字母一面又描一次,还在那儿组词呢。我感觉这还是走迷宫对儿子的影响。到外面还能关注路标呢。看红绿灯。有时会说爸爸你怎么闯红灯呀,直行与拐弯的灯他还分辨的不是太清。
昨天儿子问爸爸什么是神,他爸说人们对一种东西的崇拜之类的。儿子接着又问,那一不留神又是什么意思。前两天儿子问什么是伤害,什么叫距离。
平时遇到儿子的问题我总是想办法给予解决。如果我也回答不上来的话,就告诉他等我上网查了就告诉他,有时会和他一块去找答案。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。4772人阅读
算法(14)
& & 本文给出一个c语言版的走迷宫的程序。迷宫的宽和高,迷宫矩阵,迷宫的入口和出口从文件读入。程序首先读入迷宫数据,然后显示迷宫矩阵,最后调用迷宫搜索程序找到一个路径,并输出。
1. 迷宫的表示。
迷宫用结构体MATRIX来表示
包括迷宫矩阵
迷宫的宽,迷宫的高,
迷宫入口的坐标,迷宫出口的坐标。
结构体定义如下:
typedef struct _step
typedef struct _matrix
int data[MAX_WIDTH+2][MAX_WIDTH+2]; //迷宫数据,0:表示有路,1:表示墙
//矩阵(迷宫)的宽,包括最左和最有2堵墙
//矩阵(迷宫)的宽,包括顶部和底部2堵墙
//迷宫入口
//迷宫出口
迷宫矩阵的每一个元素可以是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,
& 走迷宫的路径的每一步可用二元组(x,y)来表示。已经走过的路径放入数组path。
首先,将入口的坐标放入数组,此时path数组的元素个数为1.
接下来使用下面的规则,试图找到一条出路
1. 从当前位置(即数组的最后一个元素),从右,下,左,上四个方向搜索,看能否走通。
& 如果可找到一条通路,则
& & & 将新的位置的坐标放入path数组,数组长度加1.&
& & & 如果新的位置的坐标等于出口的坐标,搜索结束。
& 如果从各个方向都走不通,则
& & &将迷宫当前位置的元素置为1,这样,当前点就变成墙,下次就不会走到这个位置了。并将数组的最有一个元素丢弃,数组长度减1
& & &如果数组的长度为0,没有任何路径可以走通,搜索结束。
全部的代码见下:
#include &stdafx.h&
#include &stdlib.h&
#include &stdio.h&
#include &memory.h&
#define MAX_WIDTH
#define MAX_HEIGHT
typedef struct _step
typedef struct _matrix
int data[MAX_WIDTH+2][MAX_WIDTH+2]; //迷宫数据,0:表示有路,1:表示墙
//矩阵(迷宫)的宽,包括最左和最有2堵墙
//矩阵(迷宫)的宽,包括顶部和底部2堵墙
//迷宫入口
//迷宫出口
MATRIX g_matrix=
//初始化为一个迷宫,程序也能从文件中读入迷宫数据
{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列,包括4堵墙
//入口坐标
//出口坐标
static STEP
s_shift[]=
//向右走, x++, y 不变
x 不变, y++
x--, y不变
x 不变, y--
void print_paths(STEP path[],int path_len) //打印走迷宫的路径
for (i=0;i&path_i++)
printf(&-&&);
printf(&(%d,%d)&,path[i].x, path[i].y);
void print_Matrix(MATRIX* pMatrix)
//打印迷宫数据,迷宫数据包含4堵墙
for (i=0;i&pMatrix-&i++)
for (j=0;j&pMatrix-&j++)
printf(& &);
printf(&%d&,pMatrix-&data[i][j]);
printf(&\n&);
int search_path(int matric[MAX_WIDTH+2][MAX_WIDTH+2],
STEP path[],int path_len,STEP exit)
for (bFind=0,i=0;i&4;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_matrix.data[newPos.x][newPos.y]==0)
bFind=1; //找到一个位置
// path[path_len-1]表示当前位置,path[path_len-2]表示上一步的位置,
// 如果新的位置等于上一个位置,将陷入循环,故要求新的位置不能是上一步的位置
else if ( (newPos.x != path[path_len-2].x || newPos.y!=path[path_len-2].y) && g_matrix.data[newPos.x][newPos.y]==0)
//找到一个位置
if (bFind)
path[path_len++]=newP //将新的位置追加到path数组,路径长度+1
if ( newPos.x==exit.x && newPos.y==exit.y)
return path_
matric[path[path_len-1].x][path[path_len-1].y]=1; //从当前位置,无路可走,将当前位置标记为墙
path_len--;
//回退一步
if ( path_len==0)
return path_
int readMatrix(char *file)
char line[1024];
FILE *fp=NULL;
int i,j,x,y;
fp=fopen(file,&rt&);
if (fp==NULL)
printf(&Can not open file %s\n&,file);
memset(&(g_matrix),0,sizeof(g_matrix));
fgets(line,sizeof(line)-1,fp);
sscanf(line,&%d %d&,&x,&y);
//读入迷宫的行数和列数
if ( x&MAX_WIDTH || y&MAX_HEIGHT)
printf(&The Matrix is too large\n&);
fclose(fp);
g_matrix.width=x+2;
//在4条边增加4堵墙,故宽和高增加2
g_matrix.height=y+2;
for (j=0;j&g_matrix.j++)
g_matrix.data[0][j]=1;
//第一行为墙
g_matrix.data[g_matrix.height-1][j]=1; //最后一行为墙
for (i=0;i&g_matrix.i++)
g_matrix.data[i][0]=1;
//最左边的列为墙
g_matrix.data[i][g_matrix.width-1]=1; //最右边的列为墙
for (i=1;i&g_matrix.height-1;i++)
fgets(line,sizeof(line)-1,fp);
while ( *p==' ' ||*p== 9)//跳过空格符号
if ( *p&='0' && *p&='9')
sscanf(p,&%d&,&(g_matrix.data[i][j]));
//读入地i行j列的数据
while ( *p&='0' && *p&='9')
//数据已经读入,跳过当前的数字
if (j&=g_matrix.width-2)
fgets(line,sizeof(line)-1,fp);
//读入入口的行坐标和列坐标,和出口的行坐标,列坐标
sscanf(line,&%d %d %d %d&,&(g_matrix.entrance.x),&(g_matrix.exit.y),&(g_matrix.exit.x),&(g_matrix.exit.y));
fclose(fp); fp=NULL;
g_matrix.entrance.x++;
//增加了一列是墙,故入口横坐标+1
g_matrix.entrance.y++;
//增加了一行是墙,故入口纵坐标+1
g_matrix.exit.x++;
//增加了一列是墙,故入口横坐标+1
g_matrix.exit.y++;
//增加了一列是墙,故入口纵坐标+1
int main()
STEP path[MAX_WIDTH*MAX_HEIGHT];
if ( !readMatrix(&matrix.txt&) )
//不使用初始化的数据,从文件中读入迷宫数据
//读取失败,直接跳出
printf(&The matrix is\n&);
print_Matrix(&g_matrix);
path[0]=g_matrix. //将入口位置放入path数组
step_count = search_path(g_matrix.data,path,1,g_matrix.exit); //查找一条路径,路径的每一步的坐标放入path数组
if (step_count&0)
//找到一条出路,步数&0
printf(&\nThe path is\n&);
print_paths(path,step_count);
//步数&=0, 没有找到出路
printf(&No solution\n&);
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:167518次
积分:2294
积分:2294
排名:第13113名
原创:45篇
评论:121条
(1)(2)(1)(2)(1)(1)(2)(4)(7)(9)(2)(1)(1)(1)(1)(1)(2)(1)(11)老鼠走迷宫,老鼠走迷宫小游戏,4399小游戏
分类:&&|&&大小:0.46M&&|&&日期:
请记住本站网址 ,点击,方便下次再玩。
方向←→↑↓键控制小老鼠移动。
游戏加载完成后,点击START GAME → 选择左上角奶酪标志,即可进入游戏。
用最快的时间,找到奶酪。
请记住本站网址 ,点击,方便下次再玩。 《老鼠走迷宫》小游戏由4399用户提供。
相关游戏推荐
精彩专题推荐
12345678910
12345678910
文明办网文明上网举报电话:&|&举报邮箱:&||
Copyright & 2004 -
All Rights Reserved. 四三九九网络股份有限公司&版权所有}

我要回帖

更多关于 老鼠走迷宫 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信