Создание графика лабиринта в питоне - PullRequest
4 голосов
/ 18 января 2011

Эй, я пытаюсь построить график, используя словари в Python.Я использую txt файл, содержащий лабиринт (b для стен, a для путей), и я пытаюсь создать словарь, в котором перечислены все возможные шаги, которые нужно выполнить в лабиринте (простые шаги, а не полные пути).Любые идеи о том, где я должен начать?Я никогда не работал со словарями.

Огромное спасибо за помощь, благодаря которой я отлично стартовал.Еще один вопрос, я начинаю с одного действительного дома и проверяю все возможные пути.после этого больной должен переехать в другой дом и проверить пути на этом.Как я могу убедиться, что у меня нет бесконечного цикла или перепроверить дом, который я уже проверил?

Ответы [ 2 ]

4 голосов
/ 18 января 2011

Предполагая, что ваш лабиринт выглядит как сетка, позиция в лабиринте может быть представлена ​​как кортеж (строка, столбец). Когда вы создаете свой словарь, создаете запись для каждой позиции в лабиринте, начальное значение - пустой список. На каждой действительной позиции (r, c) в лабиринте, выясните, можете ли вы добраться до (r-1, c), (r, c-1), (r + 1, c) и (r, c +) 1). Если можете, добавьте этот кортеж в список. Итак, допустим, что я могу добраться до (r-1, c) и (r, c + 1) из (r, c), запись в словаре будет выглядеть как

  maze_dict[(r,c)] = [(r-1,c), (r,c+1)]

Чтобы создать пустой словарь, вы должны использовать:

maze_dict = {}

Вам также следует взглянуть на раздел словарей учебника по питону

1 голос
/ 21 октября 2012

Огромное спасибо за помощь, с которой я отлично стартовал. Просто еще один вопрос, я начинаю в одном действительном доме и проверяю все возможные пути. после этого надо переехать в другой дом и проверить пути на этом. Как я могу убедиться, что я не получаю бесконечный цикл или перепроверить дом, который я уже проверил?

Создать класс "Дом" с координатами сетки:

class House(object):
    def __init__(self, pos):
        self.pos = pos # the coordinates (position) on the grid, a tuple
        self.paths = [] # Empty array to hold paths

Создайте несколько домов:

houses = [House((1,3)), House((3,3)), House((4,3))] # a list of houses

Теперь, пройдите через каждый дом и рассчитайте его путь (и)

paths = {}
paths[(1,3)] = [(2,3), (4,3) ... ] # possible paths to the point (1,3)

for i in houses:
    try:
       i.paths = paths[(i.pos)]
    except KeyError:
       print "I don't know how to get to ", i.pos

Пройдя по списку, вы проверяете каждый дом только один раз. Теперь вы можете узнать дома, которые недоступны:

for i in houses:
   if not i.paths:
      print "I did not find a way to reach the house at ",i.pos
...