我正在尝试对下面的图形问题进行分类,或者找到解决方案的提示。
有一个(邻接)矩阵,可以包含3种类型的元素:单位,点和简单的地形。
地形没有特别的意义。
单位有一个位置(x,y由矩阵定义)和他们可以获得的点数 点有一个位置(x,y由矩阵定义) 获得点的成本是点与单位之间的曼哈顿距离 每个点只能由一个单位获得。
问题是:如何找到获得积分的单位的最低成本配置,以使单位的所有资源都耗尽?
例:
u1可以获得3分
u2可以获得2分
p1 n n p2
n u1 n p3
p4 n n n
n n u2 p5
最佳解决方案之一是:
u1 = p1, p2, p4
cost(u1)=2+3+2=7
u2 = p3, p5
cost(u2)=3+1=4
Total cost = 11
(此配置最少)
注意: 我尝试使用统一的成本搜索和A *(使用简单的启发式方法)来解决这个问题,但即使对于小尺寸的矩阵,我也会得到非常多的状态并且内存不足。
答案 0 :(得分:1)
我可以将其缩小为min-cost-max-flow问题。
让我们建立一个网络。为每个单元和每个点分配一个顶点。对于每对(单位,点),添加具有容量1的定向边缘,并且成本等于相应的曼哈顿距离。添加水槽,将其连接到所有装置。添加陷阱并将所有点连接到它。
分配以下成本和容量值:
cap(u,v)= 1 ,如果从u到v的边缘
成本(u,v)= 0 ,如果u = sink或v = trap;否则它等于从单位u到点v的曼哈顿距离。
现在,如果我们在此网络中找到min-cost-max-flow,它将成为解决您问题的方法。为什么?因为我们找到了将流量单位从每个“单位”顶点移动到某个“点”顶点的最小成本方法,这相当于原始问题。