我有一系列房间,每个房间通过基本方向(北,南,东,西)连接到一个或多个其他房间。房间的连接方式如果A在B的西边,那么B在A的东边;因此无向图。现在我需要将这些房间集合并在坐标平面上绘制图形。所有边必须平行于X或Y轴。
我尝试了一些不同的方法,但我认为目前最有效的方法如下:
假设以下向量为方向: 北= [0,1] 南= [0,-1] 东= [1,0] 西= [-1,0]
答案 0 :(得分:1)
这听起来像是一种合理的方法。我认为有一整套方法相当于在图上进行拓扑排序,然后按顺序处理节点,这样每个节点都有空间放置它,因为节点小于拓扑顺序的节点都是在它的一边。
另一种观察方式是拓扑排序不是从中心开始,而是形成一个有向图,其中每个链接从北向南或从东向西。根据拓扑排序,您知道在放置一个节点时,到目前为止还没有位于其北部或其西部的节点,因此您可以根据其东部和南部邻居分配其坐标。
如果您希望节点像以前一样放置在原点周围,您可以在之后更改它们,为每个坐标值添加一个常量以根据需要移动它们。