迷宫问题c语言4行6列,请教:迷宫问题

本文讨论了一道关于迷宫问题的编程题,涉及到在给定的二维矩阵地图中寻找最短路径的问题。代码使用了深度优先搜索(DFS)策略,但存在错误导致无法正确计算步数。作者分享了代码,并请求帮助找出问题所在。样例输入和输出展示了迷宫地图及预期的步数结果。
摘要由CSDN通过智能技术生成

已结贴√

问题点数:100 回复次数:28

ca56232b3bbedf9a539d07f37fffb99a.gif

3144d8b7615c79d9f638db40d5689d26.gif

a218af6549b45ee526caf607ebff1358.gif

0f8df0e29816ae721419de940fb833d1.gif

请教:迷宫问题

题目描述

总算期中考了,鄙人被教育局分配到了SY学校,当然是陪着很多人的。不知转了多少次车,总算到了。可惜的是,SY学校整个像个迷宫一样,就在门口贴了张学校地图。鄙人就开始研究地图了,但是学校错综复杂,等找到目的地,早就开考了。为此,鄙人取出随身携带的微型电脑(不知道从哪来的),向网上发去了求助书。注:只能往4个方向走:上、下、左、右。

输入格式

第1行,二个数,N,M。

接下来是一个N*M的矩阵,表示这个学校。(有N行,M列)。矩阵由2个数字组成。0:路;1:墙。路能走,墙不能走(这是基本常识。不过还是提醒一下,不然哪个牛又要飞檐走壁了)。

再是2行,第1行2个数X1,Y1表示校门口的坐标(即校门口在矩阵的第X1行,第Y1列)。第2行2个数X2,Y2表示鄙人的考场的坐标(即校门口在矩阵的第X2行,第Y2列)。

数据范围:0

输出格式

一个数,表示最少要走的步数。如果走不到,则输出 No Answer!

样例输入

5 5

1 1 1 1 1

1 1 1 0 0

1 0 0 0 1

0 0 1 0 0

1 1 1 0 1

4 1

5 4

样例输出

6

我的代码有点问题:

CODE:

#include

#include

int maze[100][100];

static int step=0;

int endx,endy,m,n;

int flag;

int visit(int startx,int starty)

{

//i=startx,j=starty

maze[startx][starty]=2;

if(startx==endx&&starty==endy)

flag=1;

if(maze[startx][starty+1]

==0&&starty

{

if(maze[startx][starty+1]==2)

step--;

else

step++;

visit(startx,starty+1);

}

if(maze[startx+1][starty]

==0&&startx

{

if(maze[startx+1][starty]==2)

step--;

else

step++;

visit(startx+1,starty);

}

if(maze[startx][starty-1]

==0&&starty>1&&flag==0)//往左

{

if(maze[startx][starty-1]==2)

step--;

else

step++;

visit(startx,starty-1);

}

if(maze[startx-1][starty]

==0&&startx>1&&flag==0)//往上

{

if(maze[startx-1][starty]==2)

step--;

else

step++;

visit(startx-1,starty);

}

return step;

}

void print_maze(int m,int n)

{

int i,j;

printf("print the maze map:\n");

for(i=0;i

for(j=0;j

{

if(j%5==0)

printf("\n");

printf("%d ",maze[i][j]);

}

system("pause");

}

int main()

{

int i,j;

int startx,starty;//起始坐标与结束坐

scanf("%d %d",&m,&n);// 输入迷宫的行

for(i=1;i<=m;i++)

for(j=1;j<=n;j++)

scanf("%d",&maze[i][j]);//输入迷宫数

//print_maze(m,n);//测试用,打印迷宫

scanf("%d %d",&startx,&starty);

scanf("%d %d",&endx,&endy);

if(visit(startx,starty)==0)

printf("No Answer!\n");

else

printf("step=%d",step);

system("pause");

return 0;

}

搜索更多相关主题的帖子:

迷宫

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值