项目无向循环图在坐标平面上

时间:2017-01-12 03:53:04

标签: algorithm graph path shortest-path undirected-graph

我有一系列房间,每个房间通过基本方向(北,南,东,西)连接到一个或多个其他房间。房间的连接方式如果A在B的西边,那么B在A的东边;因此无向图。现在我需要将这些房间集合并在坐标平面上绘制图形。所有边必须平行于X或Y轴。

我尝试了一些不同的方法,但我认为目前最有效的方法如下:

  1. 找到"中心"并指定它(0,0)(每隔一个房间的最短路径长度之和最小的房间)。我不知道这是否真的有必要,但它使输出更容易居中。
  2. 从中心C走出,对于遇到的每个房间R,分配一个坐标(X,Y),其中P是连接C => R的路径,导致坐标平面上的最大位移,X是网沿P的水平移动,Y是沿P的净垂直移动。
  3. 假设以下向量为方向:     北= [0,1]     南= [0,-1]     东= [1,0]     西= [-1,0]

    Here is an example of correct output I've been able to produce. Unfortunately other graphs have not been completely successful.

1 个答案:

答案 0 :(得分:1)

这听起来像是一种合理的方法。我认为有一整套方法相当于在图上进行拓扑排序,然后按顺序处理节点,这样每个节点都有空间放置它,因为节点小于拓扑顺序的节点都是在它的一边。

另一种观察方式是拓扑排序不是从中心开始,而是形成一个有向图,其中每个链接从北向南或从东向西。根据拓扑排序,您知道在放置一个节点时,到目前为止还没有位于其北部或其西部的节点,因此您可以根据其东部和南部邻居分配其坐标。

如果您希望节点像以前一样放置在原点周围,您可以在之后更改它们,为每个坐标值添加一个常量以根据需要移动它们。