查看: 32|回复: 0

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

[复制链接]
  • TA的每日心情
    无聊
    昨天 09:21
  • 签到天数: 12 天

    [LV.3]偶尔看看II

    13

    主题

    0

    回帖

    18

    积分

    新手上路

    Rank: 1

    积分
    18
    发表于 4 天前 | 显示全部楼层 |阅读模式


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

    • 平地('.')
    • 障碍物('#')
    • 起点('S')
    • 终点('E') 求从起点到终点的最短路径步数,无法到达则输出-1。

    二、核心算法:BFS广度优先搜索
    选择原因:BFS是解决无权图最短路径问题的最优方案,时间复杂度O(nm)完全适合题目约束条件(典型n,m≤1000)

    三、完整C++实现(带详细注释)
    1. #include <bits/stdc++.h>
    2. using namespace std;

    3. const int N = 1005;
    4. char grid[N][N];
    5. int dist[N][N]; // 距离矩阵
    6. int n, m;
    7. int dx[4] = {-1, 1, 0, 0}, dy[4] = {0, 0, -1, 1}; // 方向数组

    8. int bfs(int sx, int sy, int ex, int ey) {
    9.     memset(dist, -1, sizeof dist);
    10.     queue<pair<int,int>> q;
    11.     q.push({sx, sy});
    12.     dist[sx][sy] = 0;
    13.    
    14.     while (!q.empty()) {
    15.         auto [x, y] = q.front();
    16.         q.pop();
    17.         
    18.         for (int i = 0; i < 4; i++) {
    19.             int nx = x + dx[i], ny = y + dy[i];
    20.             // 越界检查 || 障碍物检查 || 已访问检查
    21.             if (nx < 0 || nx >= n || ny < 0 || ny >= m
    22.                 || grid[nx][ny] == '#' || dist[nx][ny] != -1)
    23.                 continue;
    24.                
    25.             dist[nx][ny] = dist[x][y] + 1;
    26.             if (nx == ex && ny == ey) return dist[nx][ny];
    27.             q.push({nx, ny});
    28.         }
    29.     }
    30.     return -1;
    31. }

    32. int main() {
    33.     cin >> n >> m;
    34.     int sx, sy, ex, ey;
    35.    
    36.     for (int i = 0; i < n; i++)
    37.         for (int j = 0; j < m; j++) {
    38.             cin >> grid[i][j];
    39.             if (grid[i][j] == 'S') sx = i, sy = j;
    40.             if (grid[i][j] == 'E') ex = i, ey = j;
    41.         }
    42.    
    43.     cout << bfs(sx, sy, ex, ey);
    44.     return 0;
    45. }
    复制代码

    四、算法优化点
    • 双向BFS:当起点和终点都已知时,可减少50%搜索范围
    • A*算法:若有启发式信息可用(如坐标距离)
    • 输入优化:使用快速IO方法处理大规模数据


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

    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    快速回复 返回顶部 返回列表