У меня есть набор комнат, каждая из которых связана с одной или несколькими другими комнатами по сторонам света (север, юг, восток, запад). Комнаты были соединены таким образом, что если A находится к западу от B, то B находится к востоку от A; таким образом неориентированный граф. Теперь мне нужно взять эту коллекцию комнат и изобразить их на координатной плоскости. Все кромки должны быть параллельны оси X или Y.
Я пробовал несколько разных подходов, но я думаю, что на данный момент наиболее эффективен следующий:
- Найдите «центр» и назначьте ему (0,0) (комната, для которой сумма длин кратчайших путей к каждой другой комнате наименьшая). Я не знаю, действительно ли это необходимо, но это упрощает центрирование вывода.
- Выйдите из центра C и для каждой встреченной комнаты R присвойте координаты (X, Y), где P - это путь, соединяющий C => R, приводящий к наибольшему смещению на координатной плоскости, X - чистое горизонтальное перемещение вдоль P , а Y - чистое вертикальное движение по P.
Предположим, что следующие векторы для направлений: Север = [0,1] Юг = [0, -1] Восток = [1,0] Запад = [-1,0]