45 lines
2.3 KiB
Python
45 lines
2.3 KiB
Python
|
from krata import *
|
||
|
|
||
|
def bfs(Krata: Krata, start: PoleKraty, cel: PoleKraty):
|
||
|
wierzcholek_sciezka = [["start", start], [["start", start]]]
|
||
|
bfs_kolejka = [wierzcholek_sciezka]
|
||
|
odwiedzone = set()
|
||
|
while bfs_kolejka:
|
||
|
elem = bfs_kolejka.pop(0)
|
||
|
odwNowe = str(elem[0][1].wiersz) + "/" + str(elem[0][1].kolumna)
|
||
|
odwiedzone.add(odwNowe)
|
||
|
polaObok = succ(Krata,elem[0][1])
|
||
|
for neighbor in polaObok:
|
||
|
sciezka = elem[1].copy()
|
||
|
sprOdw = str(neighbor[1].wiersz) + "/" + str(neighbor[1].kolumna)
|
||
|
if sprOdw not in odwiedzone:
|
||
|
if neighbor[1].wiersz == cel.wiersz and neighbor[1].kolumna == cel.kolumna:
|
||
|
sciezka.append(neighbor)
|
||
|
return sciezka
|
||
|
else:
|
||
|
sciezka.append([neighbor])
|
||
|
bfs_kolejka.append([neighbor, sciezka])
|
||
|
|
||
|
def succ(Krata: Krata, poleKraty: PoleKraty):
|
||
|
polaDostepneObok = list()
|
||
|
if poleKraty.kolumna - 1 >= 0: # nie poza kratę
|
||
|
if Krata.krata[poleKraty.wiersz][poleKraty.kolumna - 1] != ZawartoscPola.SCIANA: # nie szafka (szafka to ściana)
|
||
|
poleLewe = PoleKraty(Krata, poleKraty.wiersz, poleKraty.kolumna - 1)
|
||
|
naLewo = ["Kierunek.LEWO", poleLewe]
|
||
|
polaDostepneObok.append(naLewo)
|
||
|
if poleKraty.wiersz - 1 >= 0: # nie poza kratę
|
||
|
if Krata.krata[poleKraty.wiersz - 1][poleKraty.kolumna] != ZawartoscPola.SCIANA:
|
||
|
poleGorne = PoleKraty(Krata, poleKraty.wiersz - 1, poleKraty.kolumna)
|
||
|
naGore = ["Kierunek.GORA", poleGorne]
|
||
|
polaDostepneObok.append(naGore)
|
||
|
if poleKraty.kolumna + 1 < LICZBA_POL_W_POZIOMIE: # nie poza kratę
|
||
|
if Krata.krata[poleKraty.wiersz][poleKraty.kolumna + 1] != ZawartoscPola.SCIANA:
|
||
|
polePrawe = PoleKraty(Krata, poleKraty.wiersz, poleKraty.kolumna + 1)
|
||
|
naPrawo = ["Kierunek.PRAWO", polePrawe]
|
||
|
polaDostepneObok.append(naPrawo)
|
||
|
if poleKraty.wiersz + 1 < LICZBA_POL_W_PIONIE: # nie poza kratę
|
||
|
if Krata.krata[poleKraty.wiersz + 1][poleKraty.kolumna] != ZawartoscPola.SCIANA:
|
||
|
poleDolne = PoleKraty(Krata, poleKraty.wiersz + 1, poleKraty.kolumna)
|
||
|
naDol = ["Kierunek.DOL", poleDolne]
|
||
|
polaDostepneObok.append(naDol)
|
||
|
return polaDostepneObok
|