洛谷P1162 填塗顏色 題解

2021-08-29 18:52:43 字數 1492 閱讀 1595

由數字00組成的方陣中,有一任意形狀閉合圈,閉合圈由數字11構成,圍圈時只走上下左右44個方向。現要求把閉合圈內的所有空間都填寫成22.例如:6 \times 66×6的方陣(n=6n=6),塗色前和塗色後的方陣如下:

0 0 0 0 0 0

0 0 1 1 1 1

0 1 1 0 0 1

1 1 0 0 0 1

1 0 0 0 0 1

1 1 1 1 1 1

0 0 0 0 0 0

0 0 1 1 1 1

0 1 1 2 2 1

1 1 2 2 2 1

1 2 2 2 2 1

1 1 1 1 1 1

輸入格式:

每組測試資料第一行乙個整數n(1 \le n \le 30)n(1≤n≤30)

接下來nn行,由00和11組成的n \times nn×n的方陣。

方陣內只有乙個閉合圈,圈內至少有乙個00。

輸出格式:

已經填好數字22的完整方陣。

輸入樣例#1:

6

0 0 0 0 0 0

0 0 1 1 1 1

0 1 1 0 0 1

1 1 0 0 0 1

1 0 0 0 0 1

1 1 1 1 1 1

輸出樣例#1:

0 0 0 0 0 0

0 0 1 1 1 1

0 1 1 2 2 1

1 1 2 2 2 1

1 2 2 2 2 1

1 1 1 1 1 1

1 \le n \le 301≤n≤30

這是一道簡單的搜尋題,把圈外的元素都搜一遍並賦值-1,從一點向四個方向搜尋,越界或不等於0時停止;

第一次提交時坑了我一下,題意是閉合圈而不是閉合圓,所以不能只設四個角為搜尋起點,要把四條邊上的所有元素都設定成搜尋起點,遇到圈就會return;

現在圈外元素全部為-1,圈內元素為0;圈為1,**劃分已經很明顯了,直接按照題意輸出就ok;

#include using namespace std;

int n,a[31][31];

void dfs(int x, int y)

int main()

for (int i = 1; i <= n; i++)

for (int i = 1; i <= n; i++)

for (int i = 1; i <= n; i++)

else if (a[i][j] == 1)

else

} cout << endl;

} return 0;

}

洛谷P1162 填塗顏色

由數字0組成的方陣中,有一任意形狀閉合圈,閉合圈由數字1構成,圍圈時只走上下左右4個方向。現要求把閉合圈內的所有空間都填寫成2.例如 6 6的方陣 n 6 塗色前和塗色後的方陣如下 0 0 0 0 0 0 0 0 1 1 1 1 0 1 1 0 0 1 1 1 0 0 0 1 1 0 0 0 0 1...

填塗顏色 洛谷P1162

由數字0組成的方陣中,有一任意形狀閉合圈,閉合圈由數字1構成,圍圈時只走上下左右4個方向。現要求把閉合圈內的所有空間都填寫成2.例如 6 6的方陣 n 6 塗色前和塗色後的方陣如下 0 0 0 0 0 0 0 0 1 1 1 1 0 1 1 0 0 1 1 1 0 0 0 1 1 0 0 0 0 1...

洛谷P1162 填塗顏色

題目描述 由數字0組成的方陣中,有一任意形狀閉合圈,閉合圈由數字1構成,圍圈時只走上下左右4個方向。現要求把閉合圈內的所有空間都填寫成2,例如 6 6的方陣 n 6 塗色前和塗色後的方陣如下 0 0 0 0 0 0 0 0 1 1 1 1 0 1 1 0 0 1 1 1 0 0 0 1 1 0 0 ...