假设我有一个房间有3种不同颜色的块,标记为A,B和C:
我的目标是找到离Lolo最近的三个街区,这样我就有一个A,一个B和一个C.另外,每个街区和Lolo本身必须在不同的行上:
例如,可以不使用第1行上的块,因为Lolo在该行上:
如果我们选择Lolo上方的A块,则不能使用第0行的其他块:
对于此示例,正确答案是这些块:
我很容易找到离Lolo最近的三个街区;但是,我很难应用额外的约束(每个字母之一,而不是在同一行)。这感觉就像旅行商问题的变化。
找出这些街区的有效方法是什么? (即使是正确方向的一点,也会非常感激!)谢谢!
答案 0 :(得分:1)
我认为你应该使用DFS
你以下一种方式建立G:
构建图形后,您可以运行深度为3的DFS并选择成本最低的路径。
这将为您提供最低距离。
还有其他限制吗?它需要多快才能运行?
答案 1 :(得分:1)
贪心解决方案:
应该完成下面所有块的选择,使其符合行约束。
bestDistanceSoFar/3
,则停止,否则从1开始重复。为此,我建议为每种颜色设置一个排序列表。
我认为这是最佳的,但为什么需要一些思考。
<强>预处理:强>
如上所述,您可以删除Lolo所在的同一行中的所有块,但也可以删除Lolo中与同一行中相同类型的另一个块相比的所有块,这在这种情况下并不是很多,但仍然如此。
附加说明:
鉴于你只有3种颜色,蛮力的运行时间将是O(n 3 ),这比O(n!)或O(2 < TSP的sup> n 。
对蛮力的明显优化是将所有颜色分开,这将导致O的运行时间(n 1 n 2 n 3 )其中n i 是具有第i种颜色的块的数量。