题解 | 走迷宫
走迷宫
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();
}
}
非常详细

