我的任务中有一个MxN的网格
例如:
M = 5,N = 8
KKKK....
.###...X
.XX#...X
...#....
........
K - 起点,X - 终点,# - 障碍物
我需要找到从起点到终点搬运包裹所需的最少步数。我们一次只能搬运1个包裹,且不能斜着走。
这个例子的答案是20。
我的建议是实现A*算法,并针对每种可能性启动它(计算从每个起点到每个终点的最小步数),然后选择最小值,考虑到一个包裹覆盖一个终点的事实。
有更好的实现方法吗?
我的任务中有一个MxN的网格
例如:
M = 5,N = 8
KKKK....
.###...X
.XX#...X
...#....
........
K - 起点,X - 终点,# - 障碍物
我需要找到从起点到终点搬运包裹所需的最少步数。我们一次只能搬运1个包裹,且不能斜着走。
这个例子的答案是20。
我的建议是实现A*算法,并针对每种可能性启动它(计算从每个起点到每个终点的最小步数),然后选择最小值,考虑到一个包裹覆盖一个终点的事实。
有更好的实现方法吗?
f
的成本为f*a
,其中a
是该边的成本。处理多个源和汇的惯用方法是将每个组连接到另一个单一实例。n
为起点或终点的数量。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
| |
. . . # . . . .
. . . . . . . .