To wygląda jak zabawa problemu. Pozwól, że rzucę na niego z pseudokodami.
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
Myślę, że to rozwiąże Twój problem, ale nie próbowałem żadnej optymalizacji ani niczego. To może nie być wystarczająco szybkie, nie wiem. Wątpię, aby problem ten był rozwiązywany w czasie krótszym niż wykładniczy.
Oto jak ten algorytm rozwiązałoby przykład:
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
można dać więcej tła? szczególnie jaki jest oczekiwany rozmiar planszy? jakiej złożoności oczekujesz? – amit
@amit Tak, masz rację. Plansza ma co najwyżej 50 x 50, a liczba kolorów wynosi co najwyżej 10. – Michael
Coś należy powiedzieć o wykonalności. Oczywiście, tablice bez jednego wiersza lub kolumny z tym samym kolorem wszędzie nie mogą zostać rozwiązane. – flodel