在这种情况下如何实现最短路径算法?

时间:2019-01-13 00:00:13

标签: algorithm shortest-path path-finding pathfinder

我的作业有一个MxN网格

例如

M = 5,N = 8

KKKK....
.###...X
.XX#...X
...#....
........

K-起点,X-终点,#-障碍物

我需要找到最小的数量来搬运包裹,从起点到终点。 我们一次只能携带1个包裹,而且不能对角移动。

此示例的答案为20。

我的建议是实施A *算法并针对每种可能性启动它(计算从每个起点到每个终点的最小移动量),并选择最小的一个,考虑到事实1包涵盖了1个端点。

是否有更好的方法来实现?

1 个答案:

答案 0 :(得分:1)

尽管我对此的实际理解是有限的,但我将尝试将问题表达为minimum-cost flow problem。将每个起点视为一个源,将每个终点视为一个宿。在特定边缘上发送流f的成本为f * a,其中a是边缘的成本。处理多个源和接收器的一种常用方法是将每个组连接到另一个实例。

暂定公式:

致电n作为起点或终点的数量。

  1. 使用流n将所有起点连接到单个源,其中每个边的容量和流为1,成本为0。

  2. 将所有终点连接到一个水槽,每个边的容量为1,成本为0。

  3. 所有其他边均具有无限容量(至少n似乎可以解决)并花费1。

  4. 找到通过网络实现流量n的最低费用。

图:

imaginary source
 with edge to each
  S with capacity 1
 / /|\
S1S-S1S2.2.2.2.
2       | | | 2   imaginary sink
. # # # .-.-.-T -- with edge to
2       | | | 1     each T with
.2T1T # .-.-.-T --  capacity 1
                      |   |
. . . # . . . .

. . . . . . . .

(图中的数字是通过每个边缘的最佳流量,它们总计为20。)