Algorithm 带约束、BFS或DFS的最短路径算法

Algorithm 带约束、BFS或DFS的最短路径算法,algorithm,graph,depth-first-search,breadth-first-search,Algorithm,Graph,Depth First Search,Breadth First Search,问题如下: 给出了一张有障碍物的地图。给定一个起点S 终点E,找到从S到E的最短路径。注意 从S中选择任意(4)个方向,但在此过程中,您只能 从上一个方向笔直走,除非你碰到障碍物 我对这个限制感到困惑,但在此过程中,您只能 从上一个方向笔直走,除非你碰到障碍物 这是否意味着简单的BFS将无法解决这个问题?修改后的BFS或DFS能否找到解决方案 声明:我正在寻找一个解决方案,只是一些提示或想法。是的,一个简单的BFS可以在任何一个电池上转动,而在这个问题中,你只能在撞到墙上时转动 这个问题仍然可以

问题如下:

给出了一张有障碍物的地图。给定一个起点S 终点E,找到从S到E的最短路径。注意 从S中选择任意(4)个方向,但在此过程中,您只能 从上一个方向笔直走,除非你碰到障碍物

我对这个限制感到困惑,但在此过程中,您只能

从上一个方向笔直走,除非你碰到障碍物

这是否意味着简单的BFS将无法解决这个问题?修改后的BFS或DFS能否找到解决方案


声明:我正在寻找一个解决方案,只是一些提示或想法。

是的,一个简单的BFS可以在任何一个电池上转动,而在这个问题中,你只能在撞到墙上时转动

这个问题仍然可以通过修改图上的BFS来解决。要正确模拟约束,可以创建辅助顶点,从中只能向一个方向移动


或者,您可以构建另一个具有加权边的新图,并在其上使用更通用的最短路径算法(Dijkstra或Ford Bellman)。特别是,当您站在单元格中并选择方向时,请在单元格中绘制一条边,以便再次更改方向。该边的重量只是两个单元格之间直线路径的长度。

是的,一个简单的BFS可以在任何单元格处转弯,而在这个问题中,您只能在撞到墙时转弯

这个问题仍然可以通过修改图上的BFS来解决。要正确模拟约束,可以创建辅助顶点,从中只能向一个方向移动


或者,您可以构建另一个具有加权边的新图,并在其上使用更通用的最短路径算法(Dijkstra或Ford Bellman)。特别是,当您站在单元格中并选择方向时,请在单元格中绘制一条边,以便再次更改方向。这条边的重量就是两个单元格之间直线路径的长度。

我想你可以用bfs来实现这一点,在bfs中,节点都有可能击中一个可以改变方向的障碍物。我想你可以用bfs来实现这一点,节点都有可能击中一个可以改变方向的障碍物。你能解释一下吗“当您站在单元格中并选择方向时,请在单元格中绘制一条边,以便再次更改方向。这条边的重量正好是两个单元格之间直线路径的长度。“当然。假设你站在
(1,1)
,沿着向量
(1,0)
,即增加你的x坐标。假设
(1,5)
,那么你将在
(1,4)再次获得控制权
。然后,您将从权重为1的
(1,1)
(1,2)
绘制一条从权重为3=4-1的
(1,1)
(1,4)
的边。这个示例回答了您的问题吗?您能否解释一下“当您站在单元格中选择方向时,在单元格上绘制一条边,在该边上可以再次更改方向。这条边的重量正好是两个单元格之间直线路径的长度。“当然。假设你站在
(1,1)
,沿着向量
(1,0)
,即增加你的x坐标。假设
(1,5)
,那么你将在
(1,4)再次获得控制权
。然后,您将从权重为1的
(1,1)
(1,2)
绘制一条从权重为3=4-1的
(1,1)
(1,4)
的边。此示例是否回答了您的问题?