题解 | 走迷宫

走迷宫

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

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define sc second
#define fr first
#define int long long
#define itn long long
#define vec vector
#define pii pair<int,int>
#define all(a) a.begin(),a.end()
#define ui unordered_map<int,int>
// const int N = 5e5+5;
// const int mod = 998244353;
// const int mod = 1e9+7;
const int N = 1010;
void solve(){
    int n,m;
    cin >> n >> m;
    int xs,ys,xt,yt;
    cin >> xs >> ys >> xt >> yt;
    vec g(n,string(m,'.'));
    int res = 0;
    xs--;ys--;xt--;yt--;//题目索引从1开始,而我这输入的时候是从0开始
    for(auto& i:g){
        cin >> i;
    }
    queue<pii> q;//创建队列,存储待访问
    q.push({xs,ys});//起点入队
    g[xs][ys] = '*';//起点标记为已访问
    while(!q.empty()){
        int s = q.size();//记录这层的元素个数,遍历
        while(s--){
            pii t = q.front();//取出队首,一个个判断
            q.pop();//已经存储到t了,可以踢出
            if(t.first==xt && t.second==yt){//判断是否是终点
                cout << res;
                return;//记得return
            }else {
                vec<pii> dec = {{0,-1},{0,1},{-1,0},{1,0}};//记录下一步
                for(int i=0; i<4; i++){//遍历下一步
                    int nx = t.first + dec[i].first;
                    int ny = t.second + dec[i].second;
                    if(nx>=0 && nx<n && ny>=0 && ny<m && g[nx][ny]=='.'){//符合条件,注意条件范围写全
                        q.push({nx,ny});
                        g[nx][ny] = '*';
                    }
                }
            }
        }
        res++;
    }
    cout << "-1";//前面没有return的话就会启动,说明没有
}
signed main(){
    ios::sync_with_stdio(false);
    cin.tie(NULL);
    int _=1;
    // cin >> _;
    while(_--){
        solve();
    }
}

非常详细

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

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