2013-03-18 5 views
5

Представьте меня 6х6 квадрат, состоящий из 36 вершин (то есть 6 вершин в строку и 6 вершин в столбец), выглядит примерно так:C Программирование: как найти кратчайший путь?

• • • • • • 
• • • • • • 
• • • • • • 
• • • • • • 
• • • • • • 
• • • • • • 

Каждой вершина либо связно с 1, 2, 3 или 4 close-by vertexes - поэтому мы в основном получаем граф с вершинами и ребрами. Моя проблема заключается в следующем: я хочу, чтобы робот прошел через этот «лабиринт» краев, пока не найдет определенный объект, размещенный на некоторой вершине. Как только он обнаружит этот объект, он должен вернуться к исходной точке, используя быстрый путь .

Теперь я не совсем уверен, как это реализовать, поэтому мой вопрос: что такое лучшая структура для сохранения информации об этих вершинах и ребрах в C? (Матрица смежности кажется мне неэффективной, так как 36x36 довольно велико). И, используя эту информацию, как я могу найти быстрый путь к началу?

+9

'36x36' не * большой *. –

+1

смотрите http://en.wikipedia.org/wiki/A*. Следуйте за выводами, заполните свой поиск, в конце концов вы наткнетесь на математику и, возможно, на какой-нибудь код. – YvesLeBorg

+0

Это общеизвестно как проблема с продавцом. Вы можете узнать больше об этом и о решениях в Википедии: http://en.wikipedia.org/wiki/Travelling_salesman_problem –

ответ

1

Вы, кажется, нужно четыре бита на вершине, чтобы выразить, что любой из {вверх, вправо, вниз, влево} являются «открытыми» направления, то есть действительные двигаться.

Итак, вам нужно будет грандиозная общая сумма:

6 * 6 
----- = 18 bytes 
    2 

Чтобы сохранить все ваши данные о подключении. Трудно представить, что это становится намного более эффективным.

+0

Для планирования маршрута может потребоваться разведанный/неисследованный флаг. – Clifford

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