题解 | 走迷宫

走迷宫

https://www.nowcoder.com/practice/e88b41dc6e764b2893bc4221777ffe64

#include<bits/stdc++.h>

using namespace std;

const int N = 1005;

int n,m;
int sx,sy,tx,ty;
char ch[N][N];
int dx[4] = {0,1,-1,0};
int dy[4] = {1,0,0,-1};
bool vis[N][N];

struct node{
    int x;
    int y;
    int now;
};

queue<node>q;

inline bool check(int x,int y){
    if(x<1 || x>n) return false;
    if(y<1 || y>m) return false;
    if(ch[x][y] == '*') return false;
    if(vis[x][y]) return false;
    return true;
}

int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    cin>>n>>m;
    cin>>sx>>sy>>tx>>ty;
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
            cin>>ch[i][j];
    node st = {sx,sy,0};
    q.push(st);
    int ans = 0x3f3f3f3f;
    while(!q.empty()){
        node tmp = q.front();
        q.pop();
        int x = tmp.x, y = tmp.y, now = tmp.now;
        if(x == tx && y == ty){
            ans = min(ans, now);
            break;
        }
        if(now >= ans) continue;
        for(int i=0;i<4;i++){
            int nx = x+dx[i], ny = y+dy[i];
            if(!check(nx,ny)) continue;
            node nxt = {nx,ny,now+1};
            q.push(nxt);
            vis[nx][ny] = true;
        }
    }
    cout<<(ans == 0x3f3f3f3f? -1: ans);
    return 0;
}

全部评论

相关推荐

三分入剑:我觉得还是学历问题 如果你真的想要进大厂不想在小厂的话读个211得研究生吧 我感觉简历还没你好呢 我都实习了俩月了 我投了一百多份能投出20多份简历 能面试六七次 我们部门只招研究生了都 现在连9本都很难找到像样的大厂了 你又没打过rm这种 我觉得想要进步的话就考个研究生吧
点赞 评论 收藏
分享
02-04 12:01
九江学院 C++
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务