Sztuczna_Inteligencja_Gr16/bfs.py

45 lines
2.3 KiB
Python
Raw Normal View History

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