1

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

输入:

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

输出:

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

限制:

  • 障碍物不能重叠
  • 不能在矩形障碍物内设置开始和结束
  • 路径可以包括沿着矩形的边缘行进,但从不穿过它们
  • 路径只能水平和垂直,而不是对角线
  • 两个相邻顶点之间的距离为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 
   } 
}
4

1 回答 1

2

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

于 2012-08-16T00:18:32.093 回答