BFS, решение задачи об обходе матрицы

Мой код решает задачувведите сюда описание изображения

#include <bits/stdc++.h>
using namespace std;
int main() {
    int n, m;
    cin >> n >> m;

    vector <vector<int>> g(n+1, vector<int> (m+1, 0));
    vector <vector<int>> matrix(n+1, vector<int> (m+1, 0));
    queue <pair<int, int>> q;

    for(int i = 1;i <= n;i++)
        for(int j = 1;j <= m;j++)
        {
            cin >> g[i][j];
            if(g[i][j] == 1) q.push({i, j});
        }
    
    vector <int> x = {1, -1, 0, 0};
    vector <int> y = {0, 0, 1, -1};

    while(!q.empty())
    {
        auto t = q.front();
        q.pop();
        int t_x = t.first, t_y = t.second;

        for(int i = 0;i < 4;i++)
        {
            int xx = t_x + x[i], yy = t_y + y[i];
            if(xx > 0 && xx <= n && yy > 0 && yy <= m && matrix[xx][yy] == 0)
            {
                matrix[xx][yy] = matrix[t_x][t_y] + 1;
                q.push({xx, yy});
            }
        }
    }
    for(int i = 1;i <= n;i++)
    {
        for(int j = 1;j <= m;j++)
        {
            if(g[i][j] == 0)
                cout << matrix[i][j] << " ";
            else
                cout << 0 << " ";
        }   
        cout << endl;
    }
}

Данное решение ловит WA на некоторых тестах, в чем может быть ошибка?


Ответы (1 шт):

Автор решения: MBo

Заполняем матрицу большим числом

Обнуляем ячейки, для которых g[i][j] == 1

При обходе

        matrix[xx][yy] = min(matrix[xx][yy], matrix[t_x][t_y] + 1);
→ Ссылка