洛谷P1162 填塗顏色

2021-10-02 16:30:10 字數 2265 閱讀 8862

題目描述:

由數字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

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≤n≤30)

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

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

輸出格式:

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

輸入輸出樣例:

輸入#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號方案:

當輸入第乙個「1」時

判斷這個數的右下角

將他賦值為「2」

接著像傳播訊息似的

把圈內所有的「0」

全部賦值為「2」

但是這個方案有死角

因為這個方案

只往右邊和下面傳播

所以左邊會出現死角

**如下

望大神能改進(不勞煩大神了,我已經改過了 ):

#include

#include

#include

#include

using

namespace std;

intmain()

//輸入、並找到右下角}}

if(a[i1]

[j1]==0

) a[i1]

[j1]=2

;//對右下角進行賦值

for(

int i=

1;i<=n;i++

)//向四個方向延伸}}

for(

int i=

1;i<=n;i++

)//輸出

return0;

}

2號方案:

把所有的「0」

在輸入時全部賦值為「2」(上下左右各留一行,用來當邊界)

接著將周圍

全部賦值為「0」

這樣就能將所有外圍的「2」

全部連線起來

再將外圍的這些「2"

也都賦值為」0「

要賦值兩次(防死角)

程式如下:

#include

#include

#include

#include

using

namespace std;

intmain()

}for

(int i=

0;i<=n;i++

) a[i][0

]=0;

for(

int i=

0;i<=n;i++

) a[0]

[i]=0;

for(

int i=

0;i<=n+

1;i++

) a[n+1]

[i]=0;

for(

int i=

0;i<=n+

1;i++

) a[i]

[n+1]=

0;for(

int i=

1;i<=n;i++)}

}for

(int i=n;i>=

1;i--)}

}for

(int i=

1;i<=n;i++

)return0;

}

洛谷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 0 0 1...