c++ - BFS 算法 - 具有约束步骤的网格上的最短步行

标签 c++ c search breadth-first-search

问题如下:一个流浪者从网格坐标 (x,y) 开始,想到达坐标 (0,0)。从每个网格点开始,流浪者可以向北 8 步或向南 3 步或向东 5 步或向西 6 步 (8N/3S/5E/6W)。

如何使用广度优先搜索找到从 (X,Y) 到 (0,0) 的最短路线?

说明:

  • 无限网格
  • 允许负坐标
  • 必须使用队列(链表或数组)
  • 没有障碍物

最佳答案

这个问题的算法是:

对于每个轴,朝着它前进,直到您在另一个轴上的位置为 0。

伪代码:

while (x!=0) {
  if (x>0) x-=6;
  else x+=5;
}
while (y!=0) {
  if (y>0) y-=8;
  else y+=3;
}

但是,我不明白为什么您需要搜索路线 - 它并没有那么复杂。

关于c++ - BFS 算法 - 具有约束步骤的网格上的最短步行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4237818/

相关文章:

c++ - 纯虚函数和 "cannot allocate an object"

C:两个void指针的区别是什么类型?

algorithm - 如何将 A* 与以下 map 一起使用

python - 使用 Numpy 查找给定多个数组值的索引

c++ - c/c++有延时功能吗?

c++ - 如何连接 std::string 和 int

c - C 新手,简单循环

c - 将 char* 转换为枚举值的有效方法

string - 查找同一字符序列在一行中的位置

c++ - 不调试就不能运行VC++程序