Graph algorithm 寻找两个点之间的最短路径,即S和G?

Graph algorithm 寻找两个点之间的最短路径,即S和G?,graph-algorithm,dijkstra,shortest-path,a-star,Graph Algorithm,Dijkstra,Shortest Path,A Star,寻找两个点之间的最短路径,即S和G?它应该通过名为@的点。允许的路径表示为。被阻断的通路被表示为#。中间点数的上限为19 Example: input ######## #@....G# ##.##@## #..@..S# #@.....# ######## “它应该通过名为@的点”—

寻找两个点之间的最短路径,即S和G?它应该通过名为@的点。允许的路径表示为。被阻断的通路被表示为#。中间点数的上限为19

           Example: 

             input 
             ########
             #@....G#
             ##.##@##
             #..@..S#
             #@.....#
             ######## 
“它应该通过名为@的点”——如果你能详细说明的话。或者,对于上面的示例,预期的解决方案是什么。 该声明还说“阻塞路径表示为X”,在示例中,我们看到“#”。我相信你的意思是#作为X。 我假设运动的方向是左、右、上、下

这可以通过网格上的广度优先搜索(BFS)来解决。 从S开始,根据给定的约束条件逐级探索所有路径,在哪些地方可以到达,哪些地方不能到达

我们可以使用两个数组或列表,即currentLevel和nextLevel。还有一个变量,比如levelCount。 将位置S存储在currentLevel中

  • 逐个循环通过currentLevel中的位置。如果是G,则levelCount是最短路径。 否则,对于所有安全位置(左、右、上、下),我们可以到达并存储它们 下一级。“安全位置”意味着它不应该是X,不应该超出给定的范围 网格范围(即位置索引不应小于零且不大于长度) 或问题中给出的其他约束条件
  • 将currentLevel设置为nextLevel,增加levelCount并清除nextLevel。转到步骤1

  • 您好,@表示的是“检查点”,意思是从开始到结束,我们必须通过所有的@s。假设上面的例子,输出必须是16。我使用*算法通过指定移动值和与端点的距离来解决基本的没有检查点的最短路径问题,但我无法解决检查点问题。这个问题有很多重复项,但我认为这个问题最适合您的情况:。要找到其他人,请使用“site:stackoverflow.com最短路径检查点”进行谷歌搜索。