題目描述:
由數字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...