找到2点之间的最短路径,即S和G?

时间:2015-01-12 09:00:21

标签: graph-algorithm dijkstra shortest-path a-star

找到2点之间的最短路径,即S和G?它应该通过名为@的点。允许的途径表示为。并且阻塞的路径表示为#。中间点数的上限为19。

           Example: 

             input 
             ########
             #@....G#
             ##.##@##
             #..@..S#
             #@.....#
             ######## 

1 个答案:

答案 0 :(得分:0)

“它应该通过名为@的点” - 如果您可以详细说明这一点。或者对于上面的示例,预期的解决方案是什么。 声明说“阻塞的路径表示为X”,例如,我们看到“#”。我相信你的意思是#X。 我假设运动的方向是左,右,上,下。

这可以通过网格上的广度优先搜索(BFS)来解决。 从S开始,根据您可以到达的给定约束以及无法到达的位置逐级探索所有路径。

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

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