2014-01-24 4 views
0

Итак, давайте дадим конечные точки (A, B), (B, C), (C, D), тогда мы сможем сформировать маршрут A -> B -> C.Формируйте маршрут с конечными точками

Обратите внимание, что порядок конечных точек задан случайным образом. Таким образом, (A, B), (C, D), (B, C) также дали бы маршрут A -> B -> C.

Но в целом, если нам заданы упорядоченные пары конечных точек, как построить маршрут?

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

Так (A, B), (C, D) будет храниться как {A, B, C, D}. Является ли каждый элемент координатами x или y, можно определить по четности его позиции в списке (так что первая запись в списке - x, вторая запись - y, 3rd - x и т. Д.). Затем, когда каждая упорядоченная пара считывается, мы просматриваем список, чтобы увидеть, находится ли в списке либо координата x, либо y. Если это так, мы соединяемся.

Чтобы продемонстрировать, предположим, что мы читаем (A, B), (C, D), (B, C), наш список будет {A, B, C, D} после (C, D) просто читать. Когда считывается (B, C), мы видим, что B уже находится в списке. Итак, мы знаем, что A -> B -> C. Также в списке находится C, и мы имеем A-> B -> C -> D, а затем добавим (B, C) в список, чтобы сформировать {A, B , C, D, B, C}.

Мой трудный: как мы храним A -> B -> C? Какую структуру данных я должен использовать? Как мы отслеживаем частичный маршрут, который мы сформировали, когда мы идем?

Спасибо!

+0

Опалубка может быть? –

+0

Если маршрут является 'a_1 -> a_2 -> ... -> a_n', будет ли вход содержать точно пары' (a_i, a_ {i + 1}) 'для каждого' 1 <= i

+0

Если последний * - это случай, вы хотите найти [топологическую сортировку] (http://en.wikipedia.org/wiki/Topological_sorting) ациклического графа, индуцированного ребрами '(x, y)' –

ответ

1

Построить график направленных ребер с adjacency представление списка. Затем используйте DFS в начальной точке до конечной точки и сохраните ранее посещенные узлы в буфере, и как только вы достигнете адресата, значения в буфере являются путем.

+1

в случае, если ОП не знает этого, «график» является довольно стандартной структурой данных при программировании, я отсылаю его к http://en.wikipedia.org/wiki/Graph_theory – RichardPlunkett

+0

Извините. Я действительно новичок в графиках. Как я могу построить граф из списка смежности? Спасибо! – user3213711

+0

@ user3213711 Если вы новичок, вам будет хорошо, если вы узнаете, что с помощью стандартной текстовой книги структур данных и алгоритмов, таких как книга алгоритмов CLRS (введите в google), –

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