implement successor and bfs
This commit is contained in:
parent
a1938e5683
commit
be6481745a
50
src/BFS.py
Normal file
50
src/BFS.py
Normal file
@ -0,0 +1,50 @@
|
||||
import queue
|
||||
from typing import Tuple, List
|
||||
|
||||
from Node import Node
|
||||
from tile import Tile
|
||||
from const import DIRECTIONS_X, DIRECTIONS_Y
|
||||
|
||||
|
||||
def successor(x: int, y: int):
|
||||
neighbours = []
|
||||
for i in range(4):
|
||||
neighbour_x = x + DIRECTIONS_X[i]
|
||||
neighbour_y = y + DIRECTIONS_Y[i]
|
||||
|
||||
if 0 <= neighbour_x <= 9 and 0 <= neighbour_y <= 9:
|
||||
neighbours.append((neighbour_x, neighbour_y))
|
||||
|
||||
return neighbours
|
||||
|
||||
|
||||
def breadth_first_search(field: List[Tile], start_x: int, start_y: int, goal: Tuple[int]):
|
||||
# TODO
|
||||
# 1. Implementacja akcji (zapisywanie tego co robot musi zrobić by przejść z jednego node do drugiego)
|
||||
# 2. Wypisanie drogi razem z akcjami
|
||||
explored = [(start_x, start_y)]
|
||||
node_queue = queue.SimpleQueue()
|
||||
node_queue.put(Node(start_x, start_y))
|
||||
|
||||
while not node_queue.empty():
|
||||
node = node_queue.get()
|
||||
|
||||
if (node.x, node.y) == goal:
|
||||
path = []
|
||||
print(explored)
|
||||
while node.parent:
|
||||
path.append((node.x, node.y))
|
||||
node = node.parent
|
||||
print(path[::-1])
|
||||
return True
|
||||
|
||||
for x, y in successor(node.x, node.y):
|
||||
if field[y][x].number in (2, 3):
|
||||
continue
|
||||
elif (x, y) in explored:
|
||||
continue
|
||||
explored.append((x, y))
|
||||
neighbour_node = Node(x, y, node)
|
||||
node_queue.put(neighbour_node)
|
||||
|
||||
return False
|
Loading…
Reference in New Issue
Block a user