40分求助!!!!

B3625 迷宫寻路

C_zhai @ 2023-05-20 18:02:14

c++编译没过但能拿分

#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

@星期八 还是报错


|