第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

洛谷P11228地圖探險(xiǎn)題解(CSP-J 2024真題)

標(biāo)簽:
C++

https://img1.sycdn.imooc.com/123535680847a37800000000.jpg

题目重述

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

  • 平地('.')

  • 障碍物('#')

  • 起点('S')

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

核心算法BFS广度优先搜索

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

解题步骤拆解

  1. 输入处理:读取矩阵尺寸和地图数据

  2. 定位起止点:扫描矩阵记录S和E的坐标

  3. BFS初始化

  • 方向数组dir[4][2]表示上下左右移动

  • 距离矩阵dist记录步数(初始化为-1)

  • 队列q存入起点坐标

BFS执行

while(!q.empty()){
    auto [x,y] = q.front();
    q.pop();
    for(方向遍历){
        int nx = x+dx, ny = y+dy;
        if(越界检查 || 障碍物检查 || 已访问检查) continue;
        dist[nx][ny] = dist[x][y]+1;
        if(到达终点) return 结果;
        q.push({nx,ny});
    }
}

结果输出:根据dist矩阵输出终点值

完整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;}

算法优化

  1. 双向BFS:当起点和终点都已知时,可减少50%搜索范围

  2. A*算法:若有启发式信息可用(如坐标距离)

  3. 输入优化:使用快速IO方法处理大规模数据

常见错误排查

  • 忘记初始化距离矩阵为-1

  • 方向数组定义不全(缺少某个方向)

  • 队列pop操作后未及时处理导致逻辑错误

  • 边界条件未处理(如起点即终点的情况)

参考:竞赛学习


點(diǎn)擊查看更多內(nèi)容
TA 點(diǎn)贊

若覺得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
  • 推薦
  • 評(píng)論
  • 收藏
  • 共同學(xué)習(xí),寫下你的評(píng)論
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消