Проблема с исследованием робота в сборке (emu8086) - PullRequest
1 голос
/ 02 мая 2011

Я работаю над программой сборки, использующей emu8086.Программа использует встроенное устройство-робот для эмуляции виртуального робота на моделируемой карте 6x9.Карта будет содержать неизвестное количество стен и ламп (освещенных / неосвещенных), в которых робот должен пройти по карте и найти все неосвещенные лампы и зажечь их.Сам робот может получать данные только из соседних квадратов, на которые он направлен, а также может вращаться только на 90 градусов.Проект предполагает, что верхний левый угол будет источником системы координат (0,0).

http://www.emu8086.com/assembler_tutorial/robot.gif

Я понимаю, как связать робота с моим кодом для перемещения и проверки данных, однако я не уверен, как эффективно перемещаться и проверять все лампы навсю карту, не попадая в бесконечный цикл или тупик.

Я читал об использовании нескольких алгоритмов поиска, таких как алгоритмы поиска по ширине и по глубине, но я не уверен, как реализоватьтакие понятия в ассемблере (так как большая часть примера / psuedocode написана на c ++ / c # / etc).

Я не прошу какого-либо конкретного кодирования, но хочу понять, как реализовать эти функции поиска.Поскольку в задаче упоминается начало координат для системы координат, я создал двумерный массив, в котором можно принимать значения для объектов с определенными координатами.Не уверен, насколько важен массив для проблемы, но любая помощь будет признательна.

1 Ответ

0 голосов
/ 14 апреля 2013
  1. Поместите обнаруженные плитки в список невидимых узлов (ваша начальная плитка на данный момент).
  2. Возьмите плитку из не посещенных узлов и осмотрите его.
  3. После осмотра переместите плитку из не посещенных узлов в список посещенных узлов .
  4. При исследованииплитка, проверьте, присутствует ли каждая из соседних плиток в одном из ваших списков.
  5. Если нет, то рассматриваемый сосед является новым открытием;добавьте его в список unvisitedNodes .
  6. Повторяйте с пункта 2 , пока unvisitedNodes не станет пустым

Для этогоЯ бы порекомендовал создать для начала симпатичную небольшую библиотеку collection (list / queue / set).

...