Tian的题解 | 走迷宫
2025-09-06 17:40:41
发布于:广东
2阅读
0回复
0点赞
啊吧啊吧
#include<bits/stdc++.h>
using namespace std;
char mp[1010][1010];
bool vis[1010][1010];
int dx[4] = {-1,1,0,0};
int dy[4] = {0,0,-1,1};
int n,m;
struct node{
int x,y,step;
}r,l;//r代表当前点,l代表下一个点
//满足条件: 下一个点 在边界内,不是障碍物,没有走过
bool check(int ck,int co,char cb[1010][1010],bool cp[1010][1010]){
if(ck >= 1 && ck <= n && co >= 1 && co <= m && cb[ck][co] != '#' && vis[ck][co] == 0)
return 1;
else return 0;
}
void bfs(int x,int y,int step){
queue<node> q; //定义队列
q.push({x,y,step});//整体传参
vis[x][y] = 1;
while(q.size()){
r = q.front();
q.pop();//弹出元素
if(r.x == n && r.y == m){
cout<<r.step;//不需要加括号
return;
}
for(int i = 0;i < 4;i ++){
l.x = r.x +dx[i];
l.y = r.y + dy[i];
l.step = r.step + 1;//下一个点的信息
if(check(l.x,l.y,mp,vis)){
vis[l.x][l.y] = 1;//标记vis(tian就是这样错的😂)
q.push(l);
}
}
}
}
int main(){
cin>>n>>m;
for(int i = 1;i <= n;i++){
for(int j = 1;j <= m;j++){
cin>>mp[i][j];
}
}
bfs(1,1,1);
return 0;
}
看注释吧,广搜写法
这里空空如也


有帮助,赞一个