Dzień dobry !
Mam problem z algorytmem , który działa na moim komputerze (zawsze zwraca poprawny wynik) , a na "sprawdzarkach" systemu SIO w części przypadków zwraca albo zdefiniowaną przeze mnie nieskończoność wynoszącą 10000001 albo 0 , szukałem tego czy mój program np. nie wychodzi poza tablice ale niestety to nie dało rezultatu , z góry dziękuje za pomoc :) .
Zadanie w systemie SIO: https://sio2.mimuw.edu.pl/c/zwo20/p/met/
Program:

#include <bits/stdc++.h>

using namespace std;


int odleglosci[1005][1005];
vector<pair<int,int>> stacje;
int maxx , maxy;
bool odwiedzony[1005][1005];

void girdBfs()
{
    //cout << "ENTER" << endl;
    vector<pair<int,int>> kolejka;
    int dx[4] = {0, 0, -1, 1}, dy[4] = {1, -1, 0, 0};

    //odleglosci[start] = 0;



        //cout << "ODWIEDZONY" << endl;
        for(int i=0; i<stacje.size(); i++)
        {
            int stationx = stacje[i].first;
            int stationy = stacje[i].second;
            kolejka.push_back(make_pair(stationx, stationy));
            odleglosci[stationx][stationy] = 0;

        }
        //cout << "PO STACJACH" << endl;

        odwiedzony[stacje[0].first][stacje[0].second] = true;


        for (int i=0; i < kolejka.size(); i++)
        {
            //cout << "PIERWSZA PETLA" << endl;
            pair<int,int> w = kolejka[i];
            for(int j = 0; j < 4; j++)
            {
                //cout << "PO STACJACH" << endl;
                int aleia = w.second + dy[j];
                int ulica = w.first + dx[j];
                //cout << "aleia " << aleia << " ulica " << ulica << "\n";
                //cout << "Przetwarzanie : " << t[w][j] << endl;
                if( !(odwiedzony[ulica][aleia]) && ulica < maxy+2 && aleia < maxx+2 && ulica > 0 && aleia > 0)
                {
                    kolejka.push_back(make_pair(ulica,aleia));
                    odleglosci[ulica][aleia] = min(odleglosci[w.first][w.second]+ 1,odleglosci[ulica][aleia]);
                    //cout << "Odleglosc do: " << ulica << " " << aleia << " odleglosc " << odleglosci[ulica][aleia] << endl;
                    odwiedzony[ulica][aleia] = true;
                    //cout << "Odwiedzono: " << ulica<< " " << aleia << " z " << w.first << " " << w.second << endl;
                }
            }
        }


    //return odleglosci[meta];
}

int main()
{
    int liczba_stacji,a,b;
    cin >> maxx >> maxy >> liczba_stacji;
    stacje.resize(liczba_stacji+10);
    for(int ii=0; ii<1000; ii++)
    {
        for(int jj=0; jj<1000; jj++)
        {
            odleglosci[ii][jj] = 10000001;
        }
    }
    
    for(int i=0; i<liczba_stacji; i++)
    {
        cin >> a >> b;
        stacje[i] = make_pair(a,b);

    }
    //cout << "STACJE" << endl;
    girdBfs();
    for(int i=1; i<maxx+1; i++)
    {
        for(int j=1; j<maxy+1; j++)
        {
            cout << odleglosci[i][j] << " ";
        }
        cout << endl;
    }
    return 0;
}