Эта функция разбирает сетку, подобную той, которую вы дали, на набор узлов (сохраненных в виде пары координат в исходной сетке) и надиктует ребра (отображая каждый узел в список соседних узловк этому).Это очень простое в использовании представление для графа, и у вас не должно возникнуть проблем при кодировании поиска лабиринта с его использованием.В коде используется идея, что структура лабиринта описывается только ребрами (- и |), а сетка состоит из двух линий, расположенных горизонтально и вертикально.Квадрат без ребер в или из него не появится на графике.
import collections
def parse_grid(grid):
edges = collections.defaultdict(list)
for i in xrange(len(grid)):
for j in xrange(len(grid[i])):
if grid[i][j] == '-':
edges[i, j - 2].append((i, j + 2))
edges[i, j + 2].append((i, j - 2))
if grid[i][j] == '|':
edges[i - 2, j].append((i + 2,j))
edges[i + 2, j].append((i - 2,j))
nodes = set()
for e in edges.iterkeys():
nodes.add(e)
return nodes, edges
grid = """\
o . o . o . o
- - . -
o . o . o | o
. - . .
o | o . o . o
. - . -
o . o . o . o"""
print parse_grid(grid.split('\n'))