Я работал над созданием алгоритма поиска bfs на двумерной сетке в Python (объектно-ориентированный). У меня есть класс Grid, который заботится о настройке 2D-сетки и имеет некоторые функции-члены для разметки стен, начальных / конечных точек и т. Д. c.
class Grid:
def __init__(self, nodes=[]):
self.nodes = nodes
# Initializes a grid of rl x rc and fills all nodes with and empty value of 1
def init_grid(self, rl, cl):
arr = []
arr2 = []
for i in range(rl):
for j in range(cl):
arr2.append(Node("1", i, j))
arr.append(arr2)
arr2 = []
self.nodes = arr
# Sets the start and end points at the specified rows and cols
def set_start_and_end(self, startr, startc, endr, endc):
startNode = Node("S", startr, startc)
endNode = Node("E", endr, endc)
self.nodes[startr][startc] = startNode
self.nodes[endr][endc] = endNode
def mark_visited(self, row, col):
self.nodes[row][col].val = "V"
def mark_wall(self, row, col):
self.nodes[row][col].val = "X"
У меня также есть файл, который будет содержать все мои алгоритмы поиска (пока только BFS). В одной из моих вспомогательных функций для поиска соседей узла он принимает как объект узла, так и объект сетки.
def get_neighbors(self, node, grid):
neighbours = []
R = len(grid)
C = len(grid[0])
dr = [-1, +1, 0, 0]
dc = [0, 0, +1, -1]
for i in range(4):
rr = node.r + dr[i]
cc = node.c + dc[i]
if rr < 0 or cc < 0: continue
if rr >= R or cc >= C: continue
neighbour = grid[rr][cc]
neighbours.append(neighbour)
return neighbours
Я новичок в Python и пришел из языков типов, но есть ли способ как-то типизировать мои узлы и объекты сетки? На данный момент мне не нужно создавать экземпляры объектов сетки или узлов, но я не уверен, как получить к ним доступ в противном случае. Если только я не пойду об этом неправильно.