入力:
2つの異なる(オプション)値を含む2D配列。ルールを説明するときは0と1を使用します。入力フォーマットはもちろん柔軟です。
チャレンジ:
ゼロは水であり、ゼロは島です。孤独を確実にするために、あなたの仕事はゼロの行と列を挿入することによってすべての島を水で囲むことです。水を無駄にしたくないので、追加する水の量を最小限に抑える必要があります。同じ量の水を追加する必要がある複数のソリューションがある場合は、行ではなく列を追加する必要があります。これをテストケースで示します。
出力:
新しく変更された2D配列。出力形式はもちろん柔軟です。
テストケース:
入力と出力はダッシュで区切られています。追加されたゼロは太字で示されています。テストケースをより便利な形式に変換する場合は、ここで回答の1つを使用してください。
1
---
1
1 1
---
1 0 1
1 1
1 1
---
1 0 1
0 0 0
1 0 1
1 0
0 1
---
1 0 0
0 0 1
ゼロの行ではなく、ゼロの列を追加したことに注意してください。これは、必要なゼロの数が等しく、列を優先する必要があるためです。
1 0 0 0 1
0 1 0 1 0
0 0 1 0 0
0 1 0 1 0
---
1 0 0 0 1
0 0 0 0 0
0 1 0 1 0
0 0 0 0 0
0 0 1 0 0
0 0 0 0 0
0 1 0 1 0
列ではなく行を追加したことに注意してください。追加のゼロが最小限で済むからです。
0 0 1 0 0
0 1 1 1 0
---
0 0 0 1 0 0 0
0 0 0 0 0 0 0
0 1 0 1 0 1 0
これには列と行の両方が必要です。
0 0 1 0 0
0 1 0 1 0
---
0 0 0 1 0 0 0
0 1 0 0 0 1 0
必要な水が少ないため、1つの行よりも2つの列を追加する方が適切です。
0 0
1 0
0 1
1 0
0 0
---
0 0
1 0
0 0
0 1
0 0
1 0
0 0
必要な水が少ないため、1つの列よりも2つの行を追加する方が適切です。
関連。
—
Stewie Griffin
ダムニット、スチューイ、今、私は再び「ジャック・スパロウ」を頭に突き刺した!
—
Shaggy
この問題は、2部グラフの頂点カバー問題と同等であり、Wikipediaによると、多項式時間で解決できます。
—
user202729
気が変わった...重み付けされているかもしれません。とにかく、十分に大きな正方行列の場合、(うまくいけば)同等です。したがって、アルゴリズムが「単純すぎる」場合は注意してください。
—
user202729
私は多項式時間アルゴリズムを持っていると思います。
—
user202729