(self)
| 101 | self.reached = False |
| 102 | |
| 103 | def search(self) -> list[TPosition]: |
| 104 | while self.open_nodes: |
| 105 | # Open Nodes are sorted using __lt__ |
| 106 | self.open_nodes.sort() |
| 107 | current_node = self.open_nodes.pop(0) |
| 108 | |
| 109 | if current_node.pos == self.target.pos: |
| 110 | return self.retrace_path(current_node) |
| 111 | |
| 112 | self.closed_nodes.append(current_node) |
| 113 | successors = self.get_successors(current_node) |
| 114 | |
| 115 | for child_node in successors: |
| 116 | if child_node in self.closed_nodes: |
| 117 | continue |
| 118 | |
| 119 | if child_node not in self.open_nodes: |
| 120 | self.open_nodes.append(child_node) |
| 121 | else: |
| 122 | # retrieve the best current path |
| 123 | better_node = self.open_nodes.pop(self.open_nodes.index(child_node)) |
| 124 | |
| 125 | if child_node.g_cost < better_node.g_cost: |
| 126 | self.open_nodes.append(child_node) |
| 127 | else: |
| 128 | self.open_nodes.append(better_node) |
| 129 | |
| 130 | return [self.start.pos] |
| 131 | |
| 132 | def get_successors(self, parent: Node) -> list[Node]: |
| 133 | """ |
no test coverage detected