này trông giống như một vấn đề thú vị. Hãy để tôi chụp ảnh với một số mã giả.
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
Tôi nghĩ rằng sẽ giải quyết được vấn đề của bạn, nhưng tôi đã không thử bất kỳ tối ưu hóa hay gì cả. Tuy nhiên, điều này có thể không đủ nhanh, tôi không biết. Tôi nghi ngờ vấn đề này có thể giải quyết được trong thời gian phụ theo cấp số nhân.
Sau đây là cách thuật toán này sẽ giải quyết ví dụ:
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
Nguồn
2012-04-28 14:32:02
Bạn có thể cho nền hơn? đặc biệt kích thước bảng dự kiến là bao nhiêu? bạn đang mong đợi điều gì phức tạp? – amit
@amit Có, bạn đã đúng. Bảng tối đa là 50 x 50 và số lượng màu tối đa là 10. – Michael
Có điều gì đó cần phải nói về tính khả thi. Rõ ràng, các bảng không có một hàng hoặc cột có cùng màu ở khắp mọi nơi không thể được giải quyết. – flodel