def a_star(self): que = MyQueue() # kolejka wierzchołków do sprawdzenia finished = MyQueue() # kolejka skończonych counter = 0 added_to_frontier = [] que.insert( Vertex(index=self.start, previous=-1, graph_distance=0, heuristic_distance=self.manhattan(self.start, self.target), path='')) added_to_frontier.append(self.start) while not que.is_empty(): current = que.remove() counter += 1 current.considered = counter if current.index != self.target: for child in self.adjacency_list[current.index]: if not que.contains(child[0]) and not finished.contains( child[0]): que.insert( Vertex( index=child[0], previous=current.index, graph_distance=current.graph_distance + int(child[1]), heuristic_distance=self.manhattan( child[0], self.target), path= f'{current.path}{LETTER_INDEXES[current.index]} -> ' )) added_to_frontier.append(child[0]) elif que.contains(child[0]): if current.distance + child[1] < que[ child[0]].distance: que.set_distance(child[0], current.distance + child[1]) que.set_previous( child[0], current.index) # aktualizuj poprzednika que.set_path( child[0], f'{current.path}{LETTER_INDEXES[current.index]} -> ' ) # aktualizuj sciezke finished.insert(current) else: while not que.is_empty(): finished.insert(que.remove()) for index in added_to_frontier: print(f'{finished[index].considered}, {finished[index]}') print( f'najkrótsza znaleziona ścieżka z {LETTER_INDEXES[self.start]} do {LETTER_INDEXES[self.target]}:' ) print(str(current.path) + str(LETTER_INDEXES[self.target])) return str(current.path) + str(LETTER_INDEXES[self.target]) for index in added_to_frontier: print(f'{finished[index].considered}, {finished[index]}') print('ścieżka nie została odnaleziona') return 'brak ścieżki'