c++ - 如何实现 Floyd 算法在具有矩形障碍物的 11x11 网格上寻找最短路径?

标签 c++ algorithm floyd-warshall

几天来,我一直在努力弄清楚如何实现弗洛伊德算法,以找到网格结构中的最短路径,如下所述。任何人都可以指出我将如何实现这样的事情的正确方向吗?谢谢。

输入:

  • 开始/结束坐标
  • 用户输入的数字必须介于 0 到 10 之间
  • 障碍物数量
  • 左上角和右下角的障碍物坐标

输出:

  • 显示所有经过的坐标的路径
  • 作为整数的距离

限制:

  • 障碍不能重叠
  • Start和End不能设置在矩形障碍物内
  • 路径可以包括沿着矩形的边缘行进但从不穿过它们
  • 路径只能水平和垂直,不能对角
  • 相邻两个顶点之间的距离为1

我需要帮助生成 121x121 数组的条件。

这就是我目前所拥有的。

for(i=1;i<=n;i++) { 
   for(j=1;j<=n;j++) { 
         if( edge exists from i to j ) W[i][j] = 1; 
               // distance=1 if nodes are adjacent 
         else if ( edge does not exist from i to j ) W[i][j] = inf; 
              // distance=inf. if nodes do not meet 
         else if ( i = j ) W[i][j] = 0; // distance=0 if i=j 
   } 
}

最佳答案

http://en.wikipedia.org/wiki/Floyd%E2%80%93Warshall_algorithm 只需使用此伪代码来实现该算法(它不应该与实际的 C++ 代码有太大区别(这是一个相当简单的算法)。Wiki 链接还提供了最短路径重建算法。 您是否会考虑实现简单的呼吸优先搜索,因为您正在处理网格。 哈哈,这是我在这个论坛上的第一篇帖子:)

关于c++ - 如何实现 Floyd 算法在具有矩形障碍物的 11x11 网格上寻找最短路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10286121/

相关文章:

c++ - 在 Linux 上以编程方式为 gdb 在 C 或 C++ 代码中设置断点

c++ - 将 MPI 结果写入文件

c++ - 首先按给定顺序打印所有数字,然后使用数组打印所有字符和其他符号

c++ - 用于加速汇总循环的多线程 C++ 程序

algorithm - 带循环的 Floyd-Warshall 算法?

c++ - 在实例之间的类成员函数内分离静态变量

c++ - 在 flex、bison、c++ 中实现 Wolfram 语言

algorithm - 贪心算法和硬币算法

在 Haskell 中 Floyd-Warshall 的表现——修复空间泄漏

java - Floyd Warshall 使用邻接表