2012-03-24 4 views
4

Я любитель программист, который учится программировать. я никогда не имел какие-либо компьютерные курсы науки, так что я несладко с этой тривиальной задачей:Найти кратчайший путь в лабиринте

class Room { 
    String name; 
    ArrayList<Room> neighbors = new ArrayList<Room>(); 

    // constructor with name 
    // getters 
    void addNeighbor(Room room) { 
     neighbors.add(room); 
    } 
} 

class Finder { 
    void findShortestPath(Room start, Room end) { 
     // ? 
    } 
} 

В каждом номере есть несколько соседей. Более 4, так что это не похоже на матричную задачу. Вам предоставляется конечная комната, и вы должны найти кратчайший путь из стартовой комнаты (сравнивая названия комнат). Результат должен быть "путь", как:

Start: кухня

Конец: Туалет

Путь: Кухня, гостиная, коридор, спальня, туалет

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

Может ли кто-нибудь из вас, ребята, помочь мне? Спасибо

+0

http://en.wikipedia.org/wiki/A*_search_algorithm – jonmorgan

+0

Для каждой комнаты требуются маршруты, которые можно взять за плату. Затем вы можете пересечь маршруты. –

+0

@JakobBowyer Просто возьмите 1 как стоимость :) –

ответ

3

Вы ищете BFS.

В вашем случае график G = (V,E) фактически V= { all rooms } и E = {(u,v), (v,u) | u and v are neighboring rooms }

Обратите внимание, что вы не заботитесь вы не имеете все ребра [соседей] до начала алгоритм - вы знаете, как рассчитать соответствующий набор краев [и комнат] на лету, используя поле neighbors.
Это верно, так как каждый «край», который вам нужно использовать для вашего пути, был «обнаружен», когда вы обнаружили комнату, которая ближе к пути к источнику.

Вы можете посмотреть this post - как вы можете найти фактический путь после запуска BFS.

+0

С этими знаниями я смог закончить это. Спасибо! – Nancy

+0

Добро пожаловать @Nancy. Не забудьте [принять] (http://meta.stackexchange.com/q/5234/161469) ответ, если вы нашли одно полезное. – amit

0

Вы хотите написать поиск по ширине. На эту тему имеется много ресурсов.

Смежные вопросы