AcWing844.走迷宫

题解
stl
#include <iostream>
#include <cstring>
#include <queue>
using namespace std;
typedef pair<int,int> PII;
const int N = 110;
queue<PII> q;
int g[N][N], n, m, d[N][N], dir[4][2] = {1,0, -1,0, 0,1, 0,-1};
void BFS()
{
int x, y;
q.push({1,1});
d[1][1] = 0;
while(q.size())
{
x = q.front().first, y = q.front().second;
q.pop();
if(x == n && y == m) break;
for(int i = 0; i < 4; ++i)
{
int xx = x + dir[i][0], yy = y + dir[i][1];
if(xx > 0 && xx <= n && yy > 0 && yy <= m && g[xx][yy] != 1 && d[xx][yy] == -1)
q.push({xx, yy}), d[xx][yy] = d[x][y] + 1;
}
}
}
int main()
{
memset(d, -1, sizeof d);
cin >> n >> m;
for(int i = 1; i <= n; ++i)
for(int j = 1; j <= m; ++j)
cin >> g[i][j];
BFS();
cout << d[n][m] << endl;
return 0;
}
数组模拟队列
#include <iostream>
#include <cstdio>
using namespace std;
const int N = 110;
int n, m;
int dir[4][2] = {1, 0, -1, 0, 0, 1, 0, -1};
bool vis[N][N];
int row[N * N], col[N * N], step[N * N], hh, tt = -1, g[N][N];
void BFS()
{
int x, y, xx, yy, s;
row[++ tt ] = 1, col[ tt ] = 1, step[tt] = 0;
while(hh <= tt)
{
x = row[hh], y = col[hh], s = step[hh ++ ];
if(x == n && y == m)
{
cout << s << endl;
return;
}
for(int i = 0 ;i < 4; ++i)
{
xx = x + dir[i][0], yy = y + dir[i][1];
if(xx > n || xx <= 0 || yy > m || yy <= 0 || g[xx][yy] == 1 || vis[xx][yy]) continue;
step[++ tt] = s + 1;
row[tt] = xx, col[tt] = yy, vis[xx][yy] = true;
}
}
}
int main()
{
cin >> n >> m;
for(int i = 1; i <= n; ++i)
for(int j = 1; j <= m; ++j)
cin >> g[i][j];
BFS();
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!