Stellen wir uns vor, wir haben eine Bitmatrix (die mindestens eine enthält 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
Wir wollen einige der Bits in dieser Matrix so setzen, dass sie einen zusammenhängenden Blob von 1
s bilden, in dem jeder durch orthogonale Bewegung 1
direkt oder indirekt miteinander verbunden ist 1
:
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
(Sie können dies deutlicher sehen, indem Sie 1
mit der Suchfunktion Ihres Browsers nach suchen.)
Wir möchten jedoch auch die Anzahl der von uns gesetzten Bits minimieren.
Die Aufgabe
Geben Sie bei einer gegebenen Matrix (oder einem Array von Arrays) von Bits oder Booleschen Werten die minimale Anzahl von Bits zurück, die gesetzt werden müssen, um einen zusammenhängenden Kontinent von 1
s zu erstellen . Es sollte möglich sein, von einem gesetzten Bit in der Matrix zu einem anderen zu gelangen, indem man sich nur in orthogonaler Richtung zu anderen gesetzten Bits bewegt.
Dies ist Code-Golf , daher gewinnt die kürzeste gültige Übermittlung (gemessen in Bytes).
Testfälle
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
1
die Matrix keine enthält ?