40分求助!!!!
  • 板块B3625 迷宫寻路
  • 楼主C_zhai
  • 当前回复4
  • 已保存回复4
  • 发布时间2023/5/20 18:02
  • 上次更新2023/10/23 15:14:04
查看原帖
40分求助!!!!
938026
C_zhai楼主2023/5/20 18:02

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为什么编译过不了

2023/5/20 18:02
加载中...