百度笔试算法岗第三题矩阵内存超限

#include <iostream>
#include <vector>
#include <queue>
using namespace std;
int m, n;
vector<vector<bool>> visited;
vector<vector<char>> square;
bool legal(int i, int j, char a, char b) {
    if (visited[i][j]) return false;
    if (i < 0 || i >= m || j < 0 || j >= n) return false;
    if ((a == 'r' && b == 'd') || (a == 'e' && b == 'r') || (a == 'd' && b == 'e')) return false;
    return true;
}
int main() {
    cin>>m,cin>>n;
    visited.resize(m,vector<bool>(n));
    square.resize(m, vector<char>(n));
    vector<int> dx = { 0,0,-1,1 };
    vector<int> dy = { -1,1,0,0 };
    queue<pair<int, int>> q;
    q.push({ 0,0 });
    visited[0][0] = true;
    int res = 0;
    while (!q.empty()) {
        int N = q.size();
        res++;
        for (int k = 0; k < N; k++) {
            pair<int,int> pa = q.front();
            int i = pa.first,j = pa.second;
            q.pop();
            if (i == m - 1 && j == n - 1) {
                cout << res - 1;
                system("pause");
                return 0;
            }
            for (int p = 0; p < 4; p++) {
                int newi = i + dy[p], newj = j + dx[p];
                if (legal(newi, newj, square[i][j], square[newi][newj])) {
                    q.push(make_pair(newi, newj));
                    visited[newi][newj] = 1;
                }
            }
        }
    }
    cout << -1;
    system("pause");
    return 0;
}
请大佬们指点一二。#百度笔试#
全部评论
我也是
点赞 回复 分享
发布于 2022-09-13 22:20 山西
38行感觉应该先检查是不是越界,另外没有看到读矩阵数据的代码
点赞 回复 分享
发布于 2022-09-13 22:53 河北
9, 10行交换一下,不然会溢出。38行legal最后一个参数不检查越界也会溢出。溢出的情况返回了很多true,队列爆了。
点赞 回复 分享
发布于 2022-09-13 22:55 浙江

相关推荐

10-05 11:11
海南大学 Java
投票
理想江南137:感觉挺真诚的 感觉可以试一试
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务