月色美兮 2022-03-26 00:06 采纳率: 100%
浏览 46
已结题

蓝桥杯真题 大胖子走迷宫 代码纠错

img

img

我的代码就是跑不出来,找不到哪里错了,逻辑上没有错误


#include<bits/stdc++.h>
using namespace std;
const int N = 1001;

int w;//小明体积
int dx[4] = {10-10};
int dy[4] = {010-1};
int n, k;
char mp[N][N];//存储地图 *障碍 +空地
bool vis[N][N];
struct Node {
    int x;
    int y;
    int t;
};

bool check(int xx, int yy) //判断是否有障碍或者出界

    for (int i = xx - w / 2; i <= xx + w / 2; i++) {
        for (int j = yy - w / 2; j <= yy + w / 2; j++) {
            if (mp[i][j] == '*'return false;
        }
    }
    
    //越界
    if (xx + w / 2 > n || xx - w / 2 < 1 || yy + w / 2 > n || yy - w / 2 < 1return false;
    return true;
}


void bfs() {

    queue<Node>q;
    q.push({330}); //(3,3)起点入队
    vis[3][3] = 1;


    while (!q.empty()) {
        Node s = q.front();
        q.pop();

        if (s.x == n - 2 && s.y == n - 2) { //到达终点
            cout << s.t;
            return;
        }

        //小明体积判断
        if (s.t < k) w = 5;
        else if (s.t >= k && s.t < 2 * k) w = 3;
        else if (s.t >= 2 * k) w = 1;


        if (w != 1) q.push({s.x, s.y, s.t + 1}); //原地不动

        for (int i = 0; i < 4; i++) {
            int fx = s.x + dx[i], fy = s.y + dy[i];

            if (!vis[fx][fy] && check(fx, fy) ) {
                vis[fx][fx] = 1;
                //cout<<fx<<" "<<fy<<endl;
                q.push({fx, fy, s.t + 1}); //新点入队

            }

        }
    }
}

int main() {

    cin >> n >> k;

    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= n; j++) {
            cin >> mp[i][j];
        }
    }

    bfs();

    return 0;
} 
  • 写回答

2条回答 默认 最新

  • 魔法自动机 2022-03-26 11:46
    关注

    check里面使用mp[i][j]应该先判断i和j是否在[1,n]的范围内,要是访问越界会报错。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 4月5日
  • 已采纳回答 3月28日
  • 创建了问题 3月26日

悬赏问题

  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
  • ¥15 Windows11, backspace, enter, space键失灵