我有一个问题,我将考虑使用什么算法或方法来解决从a点到B点的路径问题,其中两个点不在同一平面上(位于复合物的不同楼层/水平面上-可能不在同一栋建筑上)。
我正在考虑A*和Dijkstra's算法然而,根据这个算法,这只(如果我错了,请纠正我)只关注一个地图。对于上述两种算法,拥有不同的地图图(由于许多楼层和许多建筑物)可以有不同的楼层。
为了解决这个困难,我设计了一种格式来显示所有地图的数据一致性。在每个地图中存在建筑物名称、楼层号和每个楼层可能具有的楼层平面图(转换成二维单字符数组)的数据。例如(两个地图位于不同的文件上):
//MainFloor1 //MainFloor2
Main Main
1st 2nd
1:Wall 1:Wall
2:Door 2:Door
3:Elevator 3:Elevator
# 4:Room1
1111441111 5:Room2
1 1 #
1 1 1111441111
1 1 1552 2441
1111221111 1551 1441
# 1551 1441
//End-MainFloor1 1111221111
#
//End-MainFloor2
从给定的地图上,如果我想考虑从A点(从主楼层1的最前面开始的第1个'2'下面)到B点(从主楼层2的左上角开始的第1个'4'下面)将返回结果。
// X is the path from Point A to Point B
1111X41111 1111X41111
1 X 1 1552XXXB41
1 X 1 1551 1441
1 X 1 1551 1441
1111A21111 1111221111
我将考虑或采取什么方法从给定的映射输入中产生这样的结果?
谢谢
最佳答案
A*、BFS和其他都是在graphs上工作的算法如果两个节点(顶点)相邻且位于同一楼层,或者它们表示同一电梯但位于不同楼层,则可以将您的问题视为两个节点(顶点)之间存在边的图。
请注意,可以在内存中显式地构建图形,但不必-您可以从探路者的角度将其视为图形。