问题标题: 送豆子也没人要???

0
0
已解决
王子健
王子健
初级天翼
初级天翼

3706   走迷宫        经验值:1600

题目描述 Description

在一个m*n的迷宫中,布满了重重陷阱。迷宫里有陷阱的房间是不能踏足的,在任意一个不是陷阱的房间可以朝周围的8个方向的没有陷阱的房间继续探索。现在给出起点坐标(a,b)和终点坐标(x,y),试判断能否从起点到达终点。

输入描述 Input Description

第一行,两个由空格隔开的整数,m n
第二行,四个由空格隔开的整数,a b x y
接下来m行,每行n个整数,为0或1,0表示不是陷阱,1表示陷阱

输出描述 Output Description

如果能到达终点输出最少需要的步数;否则输出-1

样例输入 Sample Input

2 2 1 1 2 2 0 1 1 0

样例输出 Sample Output

1

数据范围及提示 Data Size & Hint

2 ≤ m,n ≤ 20

(1,1)->(2,2),共1步

 

错误代码,TLE+WA:

#include <iostream>
using namespace std;
int map[25][25];
int vis[25][25];
int dir[8][2] = {{-1, 0}, {-1, 1}, {0, 1}, {1, 1}, {1, 0}, {1, -1}, {0, -1}, {-1, -1}};//上,右上,右,右下,下,左下,左,左上 
int cnt, n, m, sx, sy, fx, fy;
void dfs(int x, int y) {
    if (x==fx && y==fy) {
        cnt ++;
        return ;
    }
    for (int i=0; i<8; i++) {
        int nx = x + dir[i][0];
        int ny = y + dir[i][1];
        if (map[nx][ny] == 0 && nx>=1 && nx<=m && ny>=1 && ny<=n && vis[nx][ny] == 0) {
            vis[nx][ny] = 1;
            dfs(nx, ny);
            vis[nx][ny] = 0;
        }
    }
}
int main() {
    cin >> m >> n >> sx >> sy >> fx >> fy;
    for (int i=1; i<=m; i++) 
        for (int j=1; j<=n; j++) 
            cin >> map[i][j];
    vis[sx][sy] = 1;
    dfs(sx, sy);
    if(cnt == 0) cout << -1;
    else cout << cnt;
    return 0;
}

望大佬找错,谢谢

王子健在2020-08-18 10:46:00追加了内容

采纳加50豆,望求解

王子健在2020-08-25 07:57:19追加了内容

最近问问题怎么总是没人回答??算了,还是老规矩,作诗:

赵逸凡他长得帅,刷题那叫一个快!为了coding献了身,_ _ _ _ _

王子健在2020-08-25 08:06:03追加了内容

送豆子

王子健在2020-08-25 12:51:51追加了内容

送豆子也没人要?


0
已采纳
邓涵睿
邓涵睿
中级天翼
中级天翼

赵逸凡他长得帅,刷题那叫一个快!为了coding献了身,吾辈之楷模也!

1
0
刘景程
刘景程
新手光能
新手光能

bfs找最小步数

你dfs找最小步数会浪费大把大把的青春年华

0
0
吴庞茂旭
吴庞茂旭
资深光能
资深光能

这么难……你敢到100000酷町豆,我就敢发完整代码;你敢到10000酷町豆,我就敢发思路!(谅你也不敢)

0
董子墨
董子墨
中级天翼
中级天翼

他问的是最少步数,你cnt有什么用

P.S.建议用广搜

0
0
赵逸凡
赵逸凡
初级启示者
初级启示者

这道题好像曾经是我的考试题,我用广搜过的

0
0
周建勋
周建勋
中级光能
中级光能

你把1401打开,和这题比较像,你可以找错

我要回答