from queue import PriorityQueue # fringe - kolejka priorytetowa przechowująca wierzchołki do odwiedzenia fringe = PriorityQueue() # put or get # explored - lista odwiedzonych stanów explored = [] # istate - stan początkowy # succ - funkcja następnika def succ(): pass # goaltest - test spełnienia celu def goaltest(): pass # f - funkcja wyznaczająca priorytet następników def f(): pass def graphsearch(fringe, explored, istate, succ, goaltest, f): # umieść new node(istate) na fringe # loop # if fringe jest pusta # return false # elem = wybierz element z fringe # if goal_test(elem.state) # return ciąg akcji zbudowany z wykorzystaniem pól parent i action # umieść elem na liście explored # for (akcja, stan) in succ(elem.state) # x = new node(stan) # x.parent = elem # x.action = akcja # p = f(x) # if stan nie należy do fringe i nie należy do explored # umieść x na fringe zgodnie z priorytetem p # else if stan należy do fringe i ma na nim priorytet r > p # zastąp węzeł o priorytecie r węzłem o priorytecie p pass