ad1 广告
 
收藏文章 楼主

洛谷P11228地图探险题解(CSP-J 2024真题)

版块:文章资讯   类型:普通   作者:某个人   查看:75   回复:0   获赞:0   时间:2025-06-10 10:39:25

一、题目重述

给定n×m的二维矩阵表示探险地图,每个格子可能是:

  • 平地('.')

  • 障碍物('#')

  • 起点('S')

  • 终点('E') 求从起点到终点的最短路径步数,无法到达则输出-1。

    二、完整C++实现(带详细注释)

    #include <bits/stdc++.h>
    using namespace std;
    
    const int N = 1005;
    char grid[N][N];
    int dist[N][N]; // 距离矩阵
    int n, m;
    int dx[4] = {-1, 1, 0, 0}, dy[4] = {0, 0, -1, 1}; // 方向数组
    
    int bfs(int sx, int sy, int ex, int ey) {
        memset(dist, -1, sizeof dist);
        queue<pair<int,int>> q;
        q.push({sx, sy});
        dist[sx][sy] = 0;
        
        while (!q.empty()) {
            auto [x, y] = q.front();
            q.pop();
            
            for (int i = 0; i < 4; i++) {
                int nx = x + dx[i], ny = y + dy[i];
                // 越界检查 || 障碍物检查 || 已访问检查
                if (nx < 0 || nx >= n || ny < 0 || ny >= m 
                    || grid[nx][ny] == '#' || dist[nx][ny] != -1) 
                    continue;
                    
                dist[nx][ny] = dist[x][y] + 1;
                if (nx == ex && ny == ey) return dist[nx][ny];
                q.push({nx, ny});
            }
        }
        return -1;
    }
    
    int main() {
        cin >> n >> m;
        int sx, sy, ex, ey;
        
        for (int i = 0; i < n; i++)
            for (int j = 0; j < m; j++) {
                cin >> grid[i][j];
                if (grid[i][j] == 'S') sx = i, sy = j;
                if (grid[i][j] == 'E') ex = i, ey = j;
            }
        
        cout << bfs(sx, sy, ex, ey);
        return 0;
    }

    三、常见错误排查

     
    ad1 广告位8,870 x auto
    回复列表
    默认   热门   正序   倒序

    回复:洛谷P11228地图探险题解(CSP-J 2024真题)

    Powered by 免费外链论坛

    ©2015 - 2025 免费外链论坛

    免费外链论坛 免费发布外链 发外链平台Sitemap

    您的IP:216.73.216.202,2025-08-03 15:00:05,Processed in 0.02962 second(s).

    备案信息:浙ICP备2024090696号

    声明:本站内容为用户自主发布,不对其内容真实性负责,虽然本站会一一审核,但能力有限,如您发现违规内容,请及时联系管理员。

    主页

    欢迎您的浏览

    QQ联系图标

    自助查询

    99%的问题都能找到答案

    联系站长

    工作时间:9:00~17:30

    微信二维码

    回到顶部

    向上滚动到顶部

    个人中心

    去个人首页看看吧

    转到底部

    向下滚动到底部

    头像

    用户名:

    粉丝数:

    签名:

    资料 关注 好友 消息