2013-03-02 5 views
0

Я использовал функцию maze_solution от Image Analyst http://www.mathworks.com/matlabcentral/fileexchange/27175-mazesolution какое-то время без проблем. Есть несколько ограничений: лабиринт должен быть совершенным и без круговых путей.Решение лабиринта MatLab

Это, как говорится, это как правило, работает очень хорошо, когда я проверить это, позвольте мне представить вам два примера выходов:

maze-1 ->solution-1 (Очевидно, работает хорошо)

maze-2 ->solution-2 (не так хорошо)

Теперь позвольте мне поставить некоторые правила, которые не очевидны о моих лабиринтах:

  1. T здесь нет круглых путей (есть некоторые, которые оказались в ловушке в стенах, но никто из них, к которым не столкнулся лабиринт).
  2. Они начинаются всегда в левом верхнем углу, а затем каждый раз выходят четыре выхода в одинаковых координатах.
  3. Всегда есть только один выход.

Итак, что бы я хотел сделать, давайте рассмотрим первый скриншот. Он работает хорошо и «находит» выход, есть ли способ заставить панель mat вывести сообщение (например, используя msgbox()) и сказать что-то вроде «Привет, пользователь, я нашел решение! Это A!»? Я уже давно об этом думал, но не нашел способа сделать это. Одно из решений, я думал только о том, в псевдокоде:

if CertainCoordinate = red pixel 
    return A 

В то время как CertainCoordinate Может быть неизменные координаты (х и у) А, В, С и D (Тогда я хотел бы использовать 4 «сослагательного наклонения»), но я не знаю, как это реализовать. Любые идеи или ... что-то указать мне в правильном направлении?

Итак, подведем итог: у меня есть алгоритм, который прямо сейчас генерирует красный путь к выходу (и я открыт для лучших алгоритмов, если у вас есть какие-либо предложения), но моя цель - заставить Matlab сказать мне, что он нашел , вместо того, чтобы показывать мне изображение. Так, например, в первом изображении я хотел бы открыть MessageBox и сказать «Привет, пользователь! Я нашел выход, это D!» Вместо того, чтобы показывать мне изображение с красным путем на нем. Проблема в том, что я не знаю, как научить MatLab, где D, и заставить его признать, что он нашел «D». Итак, есть ли какие-либо предложения о том, как это сделать?

Заранее благодарен!

+0

Они представляют собой варианты алгоритма «подключенных компонентов» с использованием идеи раскраски графа. Вы должны обратиться к учебнику стандартных алгоритмов, может быть, к Стивену Лекену или к CLRS – Arcturus

ответ

0

Предположим, у вас есть изображение под названием maze aset возможных x координаты выхода и соответствующие y координаты выхода. Также вы можете проверить, какой цвет использует программа для решения лабиринтов, скажем, это Red.

Теперь решение довольно простое. Сначала запустите лабиринт, затем проверьте следующее:

isRed = maze(x,y) == Red; 
exitxCoordinates = x(isRed) 
exityCoordinates = y(isRed) 

Это дает координаты x и y. (Если решение не найдено, они пусты). Отсюда не должно быть слишком сложно подключить их к одной из букв, которые вы указали.