給出乙個01矩陣,1佔據的部分即為需要拆的字,如果兩個1分享一條邊,那麼它們連通。連通具有傳遞性,即如果a、b連通,b、c連通,則a、c連通。
連通的一系列1被看做可以拆出的一塊,現在小kui需要輸出這些拆出的塊(用乙個01矩陣表示,並且要求矩陣的大小盡可能的小)。
為了確保輸出的順序盡可能的和書寫的順序一致,小kui從每個塊中選出最左上角的點(最左側的點中,最靠上的)作為代表點,然後按照代表點從左到右(若相同則按從上到下)的順序輸出所有拆出的塊。
輸入輸入的第一行為兩個正整數n、m,表示01矩陣的大小。
接下來n行,每行m個01字元,描述乙個需要拆的字。
對於40%的資料,滿足1<=n,m<=10。
對於100%的資料,滿足1<=n,m<=500。
輸出按照代表點從左到右(若相同則按從上到下)的順序輸出所有拆出的塊。
對於每個塊,先輸出其大小,然後用對應的01矩陣表示這個塊。
額外的樣例
樣例輸入
11 17
00000000000000000
00001111111100000
00000000000000000
00111111111111100
00000000100000000
00000010101110000
00000110100011000
00011100100001000
00000010100000000
00000001100000000
00000000000000000
樣例輸出
7 13
1111111111111
0000001000000
0000001000000
0000001000000
0000001000000
0000001000000
0000011000000
3 40001
0011
1110
1 811111111
1 11
3 41110
0011
0001
樣例輸入
14 22
0000000000001111111100
0000000000001101101100
0000110000001111111100
0000110000001101101100
0111111110001111111100
0110110110000000000000
0110110110000011000000
0111111110001111111000
0000110000000001100000
0000110110001111111100
0111111111000111111000
0000000010001101101100
0000000000000001100000
0000000000000011100000
樣例輸出
10 9
000110000
000110000
111111110
110110110
110110110
111111110
000110000
000110110
111111111
000000010
5 811111111
11011011
11111111
11011011
11111111
8 800110000
11111110
00011000
11111111
01111110
11011011
00011000
00111000
思路:簡單的bfs或者dfs求聯通塊,在dfs過程中要維護上下左右四個最值。然後記錄下每個聯通的1的座標,最後輸出的時候利用座標變換把原圖中的座標對映到要輸出的圖中。也就是要輸出的圖是以left 和 up 作為新矩陣中 0,0這個點的。記錄的每個聯通的座標要做 x - up, y - left 這樣的變換。把1填到要輸出的矩陣中行了。
#include
using
namespace std;
const
int maxn =
505;
int n, m;
string g[maxn]
;int vis[maxn]
[maxn]
;int up, down, left, right;
int dir[4]
[2]=
,,,}
;bool
judge
(int x,
int y)
return
false;}
void
dfs(
int x,
int y, vectorint,
int>>
& res)}}
void
print
(int x,
int y, vectorint,
int>>
&res)
cout << width <<
" "<< len << endl;
for(
int i =
0; i <
(int
)res.
size()
;++i)
for(
int i =
0; i < width;
++i)
}void
solve()
}}}int
main()
memset
(vis,0,
sizeof
(vis));
solve()
;return0;
}
每日一題之 hiho222周 Big Plus
描述 given an nxn 01 matrix,find the biggest plus consisting of 1s in the matrix.size 1 plus size 2 plus size 3 plus size 4 plus 1 1 1 1 111 1 1 1 1 111...
每日一題之 hiho1744 hohahola
描述 有一種叫作hohahola的飲料,售價是x元一瓶。小hi非常喜歡這種飲料,但是他現在身無分文。不過小hi有n張優惠券,買hohahola時每瓶最多使用一張優惠券,可以使該瓶 減少y元。y x 同時優惠券可以 小hi每 一張優惠券可以獲得z元。請你幫小hi計算通過 若干優惠券,他最多可以買多少瓶...
每日一題之 hiho1304 24點
週末,小hi和小ho都在家待著。在收拾完房間時,小ho偶然發現了一副撲克,於是兩人考慮用這副撲克來打發時間。小ho 玩點什麼好呢?小hi 兩個人啊,不如來玩24點怎麼樣,不靠運氣就靠實力的遊戲。小ho 好啊,好啊。經過若干局遊戲之後 小ho 小hi,你說如果要寫個程式來玩24點會不會很複雜啊?小hi...