Wyobraźmy sobie, że mamy macierz bitów (która zawiera co najmniej jeden 1):
0 1 0 1 1 0 1 0 0 1 0
0 1 0 1 0 0 1 0 1 1 0
0 0 1 0 1 1 0 1 0 1 0
1 1 0 0 1 0 0 1 1 0 1
0 0 0 1 0 1 1 0 0 1 0
Chcemy ustawić niektóre bity w tej macierzy w taki sposób, aby tworzyły ciągłą kroplę 1s, w której każdy 1jest bezpośrednio lub pośrednio połączony ze sobą 1poprzez ruch ortogonalny:
0 1 1 1 1 1 1 0 0 1 0
0 1 0 1 0 0 1 0 1 1 0
0 1 1 0 1 1 1 1 0 1 0
1 1 0 0 1 0 0 1 1 1 1
0 0 0 1 1 1 1 0 0 1 0
(Możesz to lepiej zobaczyć, wyszukując za 1pomocą funkcji „znajdź” w przeglądarce).
Jednak chcemy również zminimalizować liczbę bitów, które ustawiliśmy.
Zadanie
Biorąc pod uwagę macierz (lub tablicę tablic) bitów lub boolanów, zwróć minimalną liczbę bitów, które należy ustawić, aby utworzyć ciągły kontynent 1s. Powinno być możliwe przechodzenie z jednego zestawu bitów w macierzy do drugiego poprzez przemieszczanie się tylko w kierunku ortogonalnym do innych ustawionych bitów.
To jest golf golfowy , więc wygrywa najkrótsze prawidłowe zgłoszenie (mierzone w bajtach).
Przypadki testowe
0 1 0 1 1 0 1 0 0 1 0
0 1 0 1 0 0 1 0 1 1 0
0 0 1 0 1 1 0 1 0 1 0
1 1 0 0 1 0 0 1 1 0 1
0 0 0 1 0 1 1 0 0 1 0
=> 6
1 0 0 0 0 0 1 0 0
1 1 0 0 1 1 1 0 0
1 1 1 0 1 1 1 1 1
0 1 0 0 0 0 0 0 0
0 0 0 0 0 1 1 1 1
0 1 0 0 0 0 1 1 0
1 0 0 0 0 0 1 0 0
=> 4
0 0 0 1 1 1 0 1 1
0 0 1 0 0 0 0 1 0
0 0 1 1 1 1 1 1 0
1 1 0 0 1 1 0 0 0
0 0 1 1 1 0 0 1 1
0 1 1 1 0 0 0 0 0
1 1 1 0 0 1 1 1 0
1 1 1 0 1 1 0 1 1
0 0 0 0 1 0 0 0 1
1 1 0 0 1 1 0 1 1
0 0 0 0 0 0 0 1 0
0 1 1 1 1 0 0 0 0
0 0 0 1 1 0 0 0 1
0 1 0 0 1 0 1 1 0
0 1 1 1 0 0 0 0 1
=> 8
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
=> 0
1w matrycy?