Dzień dobry !
Rozwiązywałem zadanie z wykładu o grafach olimpiady informatycznej juniorów , i mam problem bo program po wejściu do funkcji girdBfs() program zwraca błąd , jest to najprawdopodbniej wyciek pamięci ,ale nie jestem wstanie znaleźć w którym miejscu kodu do niego dochodzi.Szukałem też miejsca w którym mogę się odwoływać poza zakres tablicy , niestety nic nie znalazłem. Z góry dziękuje za odpowiedź :)
Zadanie na OIJ: https://sio2.mimuw.edu.pl/c/zwo20/p/met/
Screen Shot z błędu:
Kod programu:
#include <bits/stdc++.h>
using namespace std;
int odleglosci[10000][10000];
vector<pair<int,int>> stacje;
int maxx , maxy;
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;
bool odwiedzony[10000][10000];
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++)
{
pair<int,int> w = kolejka[i];
for(int j = 0; j < 4; j++)
{
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<10000; ii++)
{
for(int jj=0; jj<10000; jj++)
{
odleglosci[ii][jj] = 10000001;
}
}
//cout << "INFINITOWANIE" << endl;
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;
}
- screenshot-20200528124524.png (11 KB) - ściągnięć: 9