Dieses wie ein Spaß Problem sieht. Lass es mich mit einem Pseudocode aufnehmen.
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
Ich denke, das wird Ihr Problem lösen, aber ich habe keine Optimierung oder irgendetwas versucht. Das ist vielleicht nicht schnell genug, ich weiß es nicht. Ich bezweifle, dass dieses Problem in subexponentieller Zeit lösbar ist.
Hier ist, wie dieser Algorithmus das Beispiel lösen würde:
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
Können Sie mehr Hintergrund geben? Vor allem was ist die erwartete Boardgröße? Welche Komplexität erwarten Sie? – amit
@amit Ja, Sie haben Recht. Die Platte ist höchstens 50 x 50 und die Anzahl der Farben ist höchstens 10. – Michael
Etwas sollte über Machbarkeit gesagt werden. Offensichtlich können Bretter ohne eine einzelne Reihe oder Spalte mit der gleichen Farbe überall nicht gelöst werden. – flodel