当前位置:首页 » 便宜好货 » 训练题迷宫为什么走不好

训练题迷宫为什么走不好

发布时间: 2022-09-13 03:37:42

❶ 请教大家一年级数字迷宫的问题!

可以两个数来回走吗

❷ 做过迷宫问题的来给点思路

#include<stdio.h>
#include<stdlib.h>
#define M 15
#define N 15
struct mark //定义迷宫内点的坐标类型
{
int x;
int y;
};

struct Element //链栈元素
{
int x,y; //x行,y列
int d; //d下一步的方向
};

typedef struct LStack //链栈
{
Element elem;
struct LStack *next;
}*PLStack;

/*************栈函数****************/

int InitStack(PLStack &S)//构造空栈
{
S=NULL;
return 1;
}

int StackEmpty(PLStack S)//判断栈是否为空
{
if(S==NULL)
return 1;
else
return 0;
}

int Push(PLStack &S, Element e)//压入新数据元素
{
PLStack p;
p=(PLStack)malloc(sizeof(LStack));
p->elem=e;
p->next=S;
S=p;
return 1;
}

int Pop(PLStack &S,Element &e) //栈顶元素出栈
{
PLStack p;
if(!StackEmpty(S))
{
e=S->elem;
p=S;
S=S->next;
free(p);
return 1;
}
else
return 0;
}

/***************求迷宫路径函数***********************/
void MazePath(struct mark start,struct mark end,int maze[M][N],int diradd[4][2])
{
int i,j,d;int a,b;
Element elem,e;
PLStack S1, S2;
InitStack(S1);
InitStack(S2);
maze[start.x][start.y]=2; //入口点作上标记
elem.x=start.x;
elem.y=start.y;
elem.d=-1; //开始为-1
Push(S1,elem);
while(!StackEmpty(S1)) //栈不为空 有路径可走
{
Pop(S1,elem);
i=elem.x;
j=elem.y;
d=elem.d+1; //下一个方向
while(d<4) //试探东南西北各个方向
{
a=i+diradd[d][0];
b=j+diradd[d][1];
if(a==end.x && b==end.y && maze[a][b]==0) //如果到了出口
{
elem.x=i;
elem.y=j;
elem.d=d;
Push(S1,elem);
elem.x=a;
elem.y=b;
elem.d=886; //方向输出为-1 判断是否到了出口
Push(S1,elem);
printf("\n0=东 1=南 2=西 3=北 886为则走出迷宫\n\n通路为:(行坐标,列坐标,方向)\n");
while(S1) //逆置序列 并输出迷宫路径序列
{
Pop(S1,e);
Push(S2,e);
}
while(S2)
{
Pop(S2,e);
printf("-->(%d,%d,%d)",e.x,e.y,e.d);
}
return; //跳出两层循环,本来用break,但发现出错,exit又会结束程序,选用return还是不错滴o(∩_∩)o...
}
if(maze[a][b]==0) //找到可以前进的非出口的点
{
maze[a][b]=2; //标记走过此点
elem.x=i;
elem.y=j;
elem.d=d;
Push(S1,elem); //当前位置入栈
i=a; //下一点转化为当前点
j=b;
d=-1;
}
d++;
}
}
printf("没有找到可以走出此迷宫的路径\n");
}

/*************建立迷宫*******************/
void initmaze(int maze[M][N])
{
int i,j;
int m,n; //迷宫行,列

printf("请输入迷宫的行数 m=");
scanf("%d",&m);
printf("请输入迷宫的列数 n=");
scanf("%d",&n);
printf("\n请输入迷宫的各行各列:\n用空格隔开,0代表路,1代表墙\n",m,n);
for(i=1;i<=m;i++)
for(j=1;j<=n;j++)
scanf("%d",&maze[i][j]);
printf("你建立的迷宫为o(∩_∩)o...\n");
for(i=0;i<=m+1;i++) //加一圈围墙
{
maze[i][0]=1;
maze[i][n+1]=1;
}
for(j=0;j<=n+1;j++)
{
maze[0][j]=1;
maze[m+1][j]=1;
}
for(i=0;i<=m+1;i++) //输出迷宫
{
for(j=0;j<=n+1;j++)
printf("%d ",maze[i][j]);
printf("\n");
}
}

void main()
{
int sto[M][N];
struct mark start,end; //start,end入口和出口的坐标
int add[4][2]={{0,1},{1,0},{0,-1},{-1,0}};//行增量和列增量 方向依次为东西南北

initmaze(sto);//建立迷宫

printf("输入入口的横坐标,纵坐标[逗号隔开]\n");
scanf("%d,%d",&start.x,&start.y);
printf("输入出口的横坐标,纵坐标[逗号隔开]\n");
scanf("%d,%d",&end.x,&end.y);

MazePath(start,end,sto,add); //find path
system("PAUSE");
}

❸ 二年级数学练习九走迷宫答案

这是我之前二年级做的,希望对你有帮助,图片是用电脑拍的,有点模糊,抱歉!望采纳!

迷宫行走技巧

第一定律

罗克笑了笑说:“这只是一个神话传说。咱们也不知道这个山洞有多深,有多少叉路,带多大线团才够用?”

米切尔有点着急,他问:“那你说怎么办?”

罗克说:“其实走迷宫可以不带线团,你按下面的三条规则去走,就能够走得进,也能够走得出:

第一条,进入迷宫后,可以任选一条道路往前走;

第二条,如果遇到走不通的死胡同,就马上返回,并在该路口做个记号;

第三条,如果遇到了叉路口,观察一下是否还有没有走过的通道。有,就任选一条通道往前走;没有,就顺着原路返回原来的叉路口,并做个记号。

然后就重复第二条和第三条所说的走法,直到找到出口为止。如果要把迷宫所有地方都搜查到,还要加上一条,就是凡是没有做记号的通道都要走一遍。”

以上,选自我亲爱的李毓佩老师那本伟大的《荒岛历险》。谨此作为本章节卷首语。

众所周知……英国也不知道是哪里,有一个树篱型迷宫,每天都有n多人去参观,每天也都有n多人困在里面出不来,当然有背下了路径的导游同志会定时进去“救人”……迷宫中央有那么一块空地,诚如伟大的《围城》里说的,外面的人想进去,里面的人想出来,可惜,都不能如愿。

以上内容参考:网络-迷宫

❹ 二年级下册数学练习九迷宫题怎么做

1、进入迷宫后,可以任选一条道路往前走。
2、如果遇到走不通的死胡同,就马上返回,并在该路口做个记号。
3、如果遇到了叉路口,观察一下是否还有没有走过的通道。有,就任选一条通道往前走;没有,就顺着原路返回原来的叉路口,并做个记号。这样二年级下册数学练习九迷宫题就做完了。

❺ 关于计算机C++编程的迷宫问题的解题思路

/*走通用迷宫问题的思路是:从给定的任意一个起点开始,向各个方向都有走动的可能,按照一定的顺序进行。
判断如果该方向上能走,(能走要是:不是以前走过的地方,不是墙壁,不是地图之外)就走这一步,然后记录下这一步。
如果不能走,就换下一个方向,如果能走就继续下一步。各个方向都不能走,说明到了死路,这时候就返回上一步去走下一个方向。如此继续。
每走动一步都要检测是不是到达目标了,如果到达就输出结果。
如果不能走到目标,返回到最除起点也不能走了,说明无解。
我的示意程序如下:
*/
/*地图路径求解程序,用VC++编写的,*/
#include<stdio.h>
#include<stdlib.h>
#define
ROW
9/*定义行数*/
#define
COL
13/*定义列数*/
typedef
struct
RowAndColPath{
int
r;
int
c;
}RowAndColPath;/*定义结构体实现走步过程的记录*/
int
Move[4][2]={{0,1},{1,0},{-1,0},{0,-1}};/*4个方向*/
RowAndColPath
path[ROW*COL];/*走动过程的记录*/
bool
ResultFlag=false;/*找到解的标志*/
bool
GettingPath(int
step,int
CurrentRow,int
CurrentCol,int
ResultRow,int
ResultCol,int
MapWay[][COL]);/*递归求解方法*/
void
main()
{
int
MapWay[ROW][COL]={
{1,1,1,1,1,1,1,1,0,1,1,1,1},
{0,0,0,1,1,0,0,0,0,1,1,1,1},
{1,1,0,1,1,1,1,1,0,0,1,1,1},
{1,1,0,0,0,0,1,1,1,0,1,1,1},
{1,1,0,1,1,0,0,0,0,0,0,0,1},
{1,1,0,0,1,1,1,1,1,1,1,0,1},
{1,1,1,0,0,0,0,0,0,1,1,0,1},
{1,1,1,0,1,1,1,1,0,0,0,0,1},
{1,1,1,0,0,0,1,1,1,1,1,1,1}};/*定义地图*/
int
CurrentRow=1,CurrentCol=0,ResultRow=0,ResultCol=8;/*定义初始和结束位置*/
path[0].r=CurrentRow;
path[0].c=CurrentCol;/*初始位置进入历史的第一步*/
if(GettingPath(1,CurrentRow,CurrentCol,ResultRow,ResultCol,MapWay))/*如果走动成功*/
printf("恭喜!查找成功!\n");
else
printf("抱歉,查找失败!\n");
}
bool
GettingPath(int
step,int
CurrentRow,int
CurrentCol,int
ResultRow,int
ResultCol,int
MapWay[][COL])
{
int
i,j;
for(i=0;i<4;i++)/*依次对4个方向搜索*/
{
if(ResultFlag)
return
true;
CurrentRow+=Move[i][0];
CurrentCol+=Move[i][1];/*先按该方向前进一步*/
if((CurrentRow>=0)&&(CurrentRow<ROW)&&(CurrentCol>=0)&&(CurrentRow<COL))/*如果还在地图内部*/
{
if(MapWay[CurrentRow][CurrentCol]==0)/*下一步可以走*/
{
for(j=0;j<step;j++)/*判断是不是重复了以前走过的路*/
{
if((path[j].r==CurrentRow)&&(path[j].c==CurrentCol))
break;
}
if(j==step)/*如果没有走过这个点,就走*/
{
path[step].r=CurrentRow;
path[step].c=CurrentCol;/*计入该步*/
step++;
if((CurrentRow==ResultRow)&&(CurrentCol==ResultCol))/*如果已到达目的地*/
{
ResultFlag=true;
printf("路径如下:\n\n");
for(j=0;j<step;j++)
printf("第
%d
步:\t%d\t%d\n",j,path[j].r,path[j].c);
return
true;
}
else
{
if(step>=ROW*COL)/*如果已经走遍了地图,就宣布失败*/
return
0;
if(!ResultFlag)
GettingPath(step,CurrentRow,CurrentCol,ResultRow,ResultCol,MapWay);/*没有到达目的,继续走*/
}
}
else/*如果已经走过这一点,退回去*/
{
CurrentRow-=Move[i][0];
CurrentCol-=Move[i][1];;
}
}
else/*如果该点不可走,退回去*/
{
CurrentRow-=Move[i][0];
CurrentCol-=Move[i][1];;
}
}
else/*如果该步出地图了,退回去*/
{
CurrentRow-=Move[i][0];
CurrentCol-=Move[i][1];;
}
}
if(ResultFlag)
return
true;
return
false;/*无路可走*/
}

❻ 走迷宫问题

是的,如果是一个独立的墙壁,就会一直绕着这个墙转

http://ke..com/view/300858.htm?fr=ala0_1_1#2 里
他这里说的 意思是刚一进入的入口迷宫就扶着入口所在的那面墙,这个墙一定是迷宫的外围墙壁;并不是你题目中所指的独立墙壁,如果迷宫中有一个独立的墙壁,这个独立的墙壁一定在迷宫的内部。

热点内容
为什么投屏软件只能出来一下 发布:2025-07-24 09:12:24 浏览:125
孕晚期晚上痒得厉害为什么 发布:2025-07-24 08:38:19 浏览:551
为什么现在的孩子很难考上大学 发布:2025-07-24 08:28:46 浏览:647
为什么是黄背心而不是其他颜色 发布:2025-07-24 08:20:56 浏览:984
仓鼠为什么喜欢在跑轮里吃东西 发布:2025-07-24 08:20:56 浏览:586
百姓购物网为什么那么便宜 发布:2025-07-24 08:15:11 浏览:70
零极点滤波器为什么时间长 发布:2025-07-24 08:13:07 浏览:244
为什么眼睛看手不全 发布:2025-07-24 08:08:51 浏览:930
人为什么眼睛会长息肉 发布:2025-07-24 07:17:42 浏览:172
为什么电脑会突然显示找不到wifi 发布:2025-07-24 07:07:06 浏览:332