from collections import deque from stan_nastepnik import * def goaltest(stan: Stan, cel: Stan): if stan.poleStartoweGorne.wiersz != cel.poleStartoweGorne.wiersz: return False elif stan.poleStartoweGorne.kolumna != cel.poleStartoweGorne.kolumna: return False else: return True def stan_w_liscie_nastepnikow(stan: Stan, lista_nastepnikow): for i in lista_nastepnikow: if i.stan.kierunek != stan.kierunek: continue elif i.stan.poleStartoweGorne.wiersz != stan.poleStartoweGorne.wiersz: continue elif i.stan.poleStartoweGorne.kolumna != stan.poleStartoweGorne.kolumna: continue else: return True return False def stos_akcji(stan_koncowy: Nastepnik): stos = deque() while stan_koncowy.poprzednik is not None: stos.append(stan_koncowy.akcja) stan_koncowy = stan_koncowy.poprzednik return stos def graphsearch(istate: Stan, cel: Stan): fringe = deque() explored = [] fringe.append(Nastepnik(None, istate, None)) while fringe: # for i in fringe: # print("F",i.stan.kierunek,i.stan.poleStartoweGorne.wiersz,i.stan.poleStartoweGorne.kolumna,end=" ") # print() element: Nastepnik = fringe.popleft() if goaltest(element.stan, cel): return stos_akcji(element) explored.append(element) for nastepnik in succ(element): if not stan_w_liscie_nastepnikow(nastepnik.stan, fringe) and not stan_w_liscie_nastepnikow(nastepnik.stan, explored): fringe.append(nastepnik) return False