有一系列建筑物,每个建筑物都有多个楼层,通过楼梯和升降机相互连接。目前,我正在尝试设计一个系统,该系统将找到跨越任何建筑物的两个点之间的最短路径,即同一建筑物或另一建筑物。
目前每个楼层都在图表中建模如下: 每个房间的门都是一个顶点。连接房间和主要边缘(走廊)的边的交汇点也是一个顶点。 楼层之间的楼梯是边缘。
剩下的问题是我应该如何代表升降机(电梯)(它们就在楼梯旁边)? 将它作为边缘使我想知道应该具有什么样的权重,因为我必须在找到最短路径之后运行图遍历算法。
将升降机(升降机)作为边缘或顶点?就是那个问题。 谢谢!
答案 0 :(得分:1)
使用边缘是最直接的答案,就像你在楼梯那样做。然而,虽然楼梯只能从楼层X到楼层X + 1,但是电梯可以从任何楼层到任何楼层,时间略有不同 - 我通常会发现楼梯对于两层楼更快,但是对于超过2层而言更慢。镜像这个你需要从每个楼层到每个楼层的边缘,并为每个楼层加权。
您可以改为使用一些额外的顶点和边缘。如果你在升降井的每个楼层都有一个顶点,那么你只需要一条连接所有楼层的边缘路径,而不是组合数量的边缘。
如果您还在每个级别的门外添加了一个额外的顶点,那么您可以添加进入升降机的平均延迟,因此反映了升降机可以快速通过多个楼层的事实。但是,升降机最多需要平均时间。在繁忙的时候,无论如何,他们最终都会停在几乎每个楼层,所以对于繁忙的校园来说,你不会真正从这些额外的顶点中获益。
我的投票是电梯的每个楼层的顶点和连接相邻楼层的单个边缘。它应该简化图形并减少任何路径优化算法的工作量,因为路径较少。此外,它可以更准确地反映现实情况,并最大限度地减少设置边缘权重的工作量。
答案 1 :(得分:0)
如果升降机是从一个楼层到下一个楼层的最短路径,那么它们必须是具有重量的边缘。每个级别的入口都是顶点。如果距离楼梯足够近,那么它们可能与楼梯顶点共用。
答案 2 :(得分:0)
我投票支持边缘。
假设您选择使用电梯。你走到它,按下按钮等待一下。然后你进去,再等一下,出去继续你的步行。现在,虽然你身体上没有多少动作,但是你正在移动。在楼层之间乘电梯就像走路一样,比如50米。
我的意思是站在电梯周围的时间相当于走路时旅行的距离。因此,在您使用电梯的过程中,将电梯视为您正在行走的边缘。用这个距离来比较,比如走下楼梯。