微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

未加权2D数组中的最短路径如何显示BFS期间采取的步骤/方向

如何解决未加权2D数组中的最短路径如何显示BFS期间采取的步骤/方向

在此算法中,我要尝试的是给定2D数组,找到给定起点(S)和给定端点(D)的最短路径-请记住,数组中的某些元素(*)被视为障碍。通常,我将执行典型的BFS并返回最短路径的距离,但会增加一些折痕。我需要显示通过将到达原点的基本方向(北,南,东或西,分别缩写为n,s,e,w)替换经过的元素所采用的最短路径。如果有多个最短路径,则您可以向南或向东走,以达到目标,该元素将被基本方向的组合(即“ se”)填充,如第二幅图所示。 请注意,这并不意味着东南,因为不允许对角线遍历。我熟悉算法中使用BFS的方法,但是我对如何标记使用的路径有些困惑包括的指示。对于这个问题,我不一定要寻求成熟的算法,而要用伪代码回答,才能使我走上正确的道路。第一张图片是样本输入数组的图片,第二张图片是所述输入数组的“解决方案”。 TL:DR我正在寻求有关如何在执行BFS时跟踪通过网格的方向的建议,我们将非常感谢任何帮助/反馈,并在此先感谢您!

Sample input 2D array

Sample output 2D array

解决方法

您可以用一个元数据标记每个节点(数组条目):最短的路径长度。这可以通过various algorithms来完成,但是BFS基本上可以使您到达那里。每个可达的节点都应该有一个数字。

在您的示例中,S为零(从S到S的零步长),而D为16(从S到D的16步长)。现在您拥有了所需的一切。

您现在可以:

1:选择结束节点(d = 16)

2:搜索其附近(n,e,s,w)

3:如果节点具有d-1,则根据要查看的四个方向中的哪个方向写(附加)字母。忽略其他节点。

4:选取所有d-1 至少1个字母的节点

5:对于每个已选择的节点,执行步骤2-3

6:if(d-1> 0)d = d-1并执行步骤4-5

这就是将要执行的算法的大致形状。它适用于任何位置的D。但是,如果您移动S,则需要重新标记每个节点。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。