我们应该绘制一个N x M
板。我们可以一次绘制整行或整列。给定所有电路板单元的N x M
颜色矩阵,找到绘制电路板的最少数量的绘制操作。
例如:我们应该按如下方式绘制一个3 x 3的板(R - 红色,B - 蓝色,G - 绿色):
B,B,B
B,R,R
B,G,G
最少的绘画操作是4:
你会如何解决它?
答案 0 :(得分:6)
这看起来很有趣。让我用一些伪代码拍摄它。
Function MinPaints(Matrix) Returns Integer
If the matrix is empty return 0
Find all rows and columns which have a single color
If there are none, return infinity, since there is no solution
Set the current minimum to infinity
For each row or column with single color:
Remove the row/column from the matrix
Call MinPaints with the new matrix
If the result is less than the current minimum, set the current minimum to the result
End loop
Return the current minimum + 1
End Function
我认为这将解决您的问题,但我没有尝试任何优化或任何事情。这可能不够快,我不知道。我怀疑这个问题在亚指数时间内是可以解决的。
以下是此算法如何解决该示例:
BBB
BRR
BGG
|
+---BRR
| BGG
| |
| +---RR
| | GG
| | |
| | +---GG
| | | |
| | | +---[]
| | | | |
| | | | Solvable in 0
| | | |
| | | Solvable in 1
| | |
| | +---RR
| | | |
| | | +---[]
| | | | |
| | | | Solvable in 0
| | | |
| | | Solvable in 1
| | |
| | Solvable in 2
| |
| Solvable in 3
| BB
+---Another branch with RR ...
| GG
Solvable in 4
答案 1 :(得分:3)
对于初学者,您可以尝试明确的详尽搜索。
让您的状态图表为:G=(V,E)
其中V = {all possible boards}
和E = {(u,v) | you can move from board u to v within a single operation}
。
successors(board)
函数动态生成图表,该函数将返回给定电路板的所有后继函数。您还需要h:V->R
- admissible heuristic function来评估董事会 1 。
现在,您可以运行A*或bi-directional BFS搜索[或两者的组合],您的来源将是白板,您的目标是请求的主板。因为我们使用可接受的启发式函数--A *既是complete(总是找到解决方案,如果存在)和optimal(找到最短的解决方案),它将找到最佳解决方案。 [同样适用于双向BFS]。
<强>缺点:强>
(1)允许启发式的示例是h(board) = #(miscolored_squares)/max{m,n}