Witam wszystkich.
Siedze juz 5 godzin przy kompilatorze i mozg powoli odmawia posluszenstwa, wiec kieruje swoje zapytanie na forum :)
Oto moj problem:
Mam tablice dwuwymiarową typu bool (20x20) i potrzebuje sprawdzic, czy pole o polozeniu x,y graniczy z conajmniej jednym polem o wartosci true...
Moj dotychczasowy sposob jest deczko brute force'owy i zapewne posiada kilka niedociagniec, a wyglada on tak:
bool MapStatus[20][20];
//gdzies sobie ta tablice wypelniam...
bool Sprawdz(char x, char y)
{
if(x>0 && x<19 && y>0 && y<19)
{
if(MapStatus[x-1][y-1]==true) return true;
if(MapStatus[x ][y-1]==true) return true;
if(MapStatus[x+1][y-1]==true) return true;
if(MapStatus[x-1][y ]==true) return true;
if(MapStatus[x+1][y ]==true) return true;
if(MapStatus[x-1][y+1]==true) return true;
if(MapStatus[x ][y+1]==true) return true;
if(MapStatus[x+1][y+1]==true) return true;
}
if(x==0 && y==0)
{
if(MapStatus[x+1][y ]==true) return true;
if(MapStatus[x ][y+1]==true) return true;
if(MapStatus[x+1][y+1]==true) return true;
}
if(x==19 && y==19)
{
if(MapStatus[x-1][y-1]==true) return true;
if(MapStatus[x ][y-1]==true) return true;
if(MapStatus[x-1][y ]==true) return true;
}
if(x==0)
{
if(MapStatus[x ][y-1]==true) return true;
if(MapStatus[x+1][y-1]==true) return true;
if(MapStatus[x+1][y ]==true) return true;
if(MapStatus[x ][y+1]==true) return true;
if(MapStatus[x+1][y+1]==true) return true;
}
if(x==19)
{
if(MapStatus[x-1][y-1]==true) return true;
if(MapStatus[x ][y-1]==true) return true;
if(MapStatus[x-1][y ]==true) return true;
if(MapStatus[x-1][y+1]==true) return true;
if(MapStatus[x ][y+1]==true) return true;
}
if(y==0)
{
if(MapStatus[x-1][y ]==true) return true;
if(MapStatus[x+1][y ]==true) return true;
if(MapStatus[x-1][y+1]==true) return true;
if(MapStatus[x ][y+1]==true) return true;
if(MapStatus[x+1][y+1]==true) return true;
}
if(y==19)
{
if(MapStatus[x-1][y-1]==true) return true;
if(MapStatus[x ][y-1]==true) return true;
if(MapStatus[x+1][y-1]==true) return true;
if(MapStatus[x-1][y ]==true) return true;
if(MapStatus[x+1][y ]==true) return true;
}
return false;
}
Funkcja mogla by skladac sie jedynie z osmiu instrukcji warunkowych jednak w takim wypadku mogl by wystapic przypadek proby dostepu do nieistniejacych indeksow tablicy (-1,20) dlatego funkcja jest tak zamotana...
Moje pytanie: czy istnieje szybszy i ladniejszy sposob uzyskania oczekiwanego efektu?
(PS. 4 Marooned i podobnych: jesli tak, to jak on wygląda :P)