C_zhai @ 2023-05-20 18:02:14
#include<bits/stdc++.h>
using namespace std;
const int N = 101, M = 101;
char g[N][M]; // 地图,'.' 表示空地,'#' 表示障碍物
bool st[N][M]; // 标记每个点是否被访问过
int dist[N][M]; // 记录每个点到起点的距离
int dx[4] = {-1, 0, 1, 0}, dy[4] = {0, 1, 0, -1}; // 方向数组
struct Node { // 节点结构体,记录每个点的坐标
int x, y;
};
int bfs(int n, int m) {
memset(st, 0, sizeof st); // 将 st 数组初始化为 false
memset(dist, -1, sizeof dist); // 将 dist 数组初始化为 -1
dist[1][1] = 0; // 起点到起点的距离为 0
queue<Node> q; // 定义存储节点的队列
q.push({1, 1}); // 将起点加入队列
st[1][1] = true;
while (q.size()) { // 当队列非空时,继续遍历
auto t = q.front(); // 取出队首元素
q.pop(); // 弹出队首元素
if (t.x == n && t.y == m) return 1; // 如果已到达终点,返回距离
for (int i = 0; i < 4; i++) { // 遍历四个方向
int a = t.x + dx[i], b = t.y + dy[i]; // 计算相邻节点的坐标
if (a < 0 || a >= n || b < 0 || b >= m) continue; // 如果越界,忽略该点
if (g[a][b] == '#') continue; // 如果为障碍物,忽略该点
if (st[a][b]) continue; // 如果该点已经被访问过,忽略该点
q.push({a, b}); // 将相邻节点加入队列
st[a][b] = true; // 标记该点为已访问
dist[a][b] = dist[t.x][t.y] + 1; // 更新相邻节点的距离值
}
}
return -1; // 如果无法到达终点,返回 -1
}
int main() {
int n, m;
cin >> n >> m;
for (int i = 0; i < n; i++){
for (int j = 0; j < m; j++){
cin>>g[i][j];
}
}
int res = bfs(n, m);
if(res==1) cout<<"Yes";
else cout<<"No";
return 0;
}
auto为什么编译过不了
by Use_Imagination @ 2023-05-20 18:21:52
auto是在C++14里加入的,C++98里没有
(如果您用的是Dev-C++)
by C_zhai @ 2023-05-20 18:52:14
@luogu_wzh 该咋改 把auto改成啥
by 星期八 @ 2023-05-20 19:02:17
@C_zhai 改为正常的int、long long,都可以吧
by C_zhai @ 2023-05-20 19:37:02
@星期八 还是报错