Problem Description
A while ago I had trouble sleeping. I used to lie awake, staring at the ceiling, for hours and hours. then one day my grandmother suggested I tried counting sheep after I 'd gone to bed. as always when my grandmother suggests things, I decided to try it out. the only problem was, there were no sheep around to be counted when I went to bed.
Creative as I am, that wasn' t going to stop me. I sat down and wrote a computer program that made a grid of characters, where # represents a sheep, while. is grass (or whatever you like, just not sheep ). to make the counting a little more interesting, I also decided I wanted to count flocks of sheep instead of single sheep. two sheep are in the same flock if they share a common side (up, down, right or left ). also, if sheep A is in the same flock as sheep B, and sheep B is in the same flock as sheep C, then sheeps A and C are in the same flock.
Now, I 've got a new problem. though counting these sheep actually helps me fall asleep, I find that it is extremely boring. to solve this, I 've decided I need another computer program that does the counting for me. then I'll be able to just start both these programs before I go to bed, and I'll sleep tight until the morning without any disturbances. I need you to write this program for me.
Input
The first line of input contains a single number T, the number of test cases to follow.
Each test case begins with a line containing two numbers, H and W, the height and width of the sheep grid. then follows H lines, each containing W characters (either # or .), describing that part of the grid.
Output
For each test case, output a line containing a single number, the amount of sheep flock son that grid according to the rules stated in the problem description.
Notes and Constraints
Zero <T <= 100
0 <H, W <= 100
Sample Input
2
4
#.#.
.#.#
#.##
.#.#
3 5
###.#
..#..
#.###
Sample Output
6
3
Once with DFS a few days ago
Use BFS again now
The principle is that you have found # + 1, and then changed the # attachment connected # To "."
[Cpp]
# Include <stdio. h>
# Include <string. h>
Char map [105] [105];
Int to [4] [2] = {,-, 0,-1 };
Int n, m, cnt;
Void bfs (int x, int y)
{
Int I;
Int xx, yy;
For (I = 0; I <4; I ++)
{
Xx = x + to [I] [0];
Yy = y + to [I] [1];
If (xx <0 | yy <0 | xx> = n | yy> = m | map [xx] [yy]! = '#')
Continue;
Map [xx] [yy] = '.';
Bfs (xx, yy );
}
}
Int main ()
{
Int t;
Scanf ("% d", & t );
While (t --)
{
Scanf ("% d", & n, & m );
Int I, j, l;
Cnt = 0;
For (I = 0; I <n; I ++)
{
Scanf ("% s", map [I]);
}
For (I = 0; I <n; I ++)
{
For (j = 0; j <m; j ++)
{
If (map [I] [j] = '#')
{
Cnt ++;
Map [I] [j] = '.';
Bfs (I, j );
}
}
}
Printf ("% d \ n", cnt );
}
Return 0;
}
# Include <stdio. h>
# Include <string. h>
Char map [105] [105];
Int to [4] [2] = {,-, 0,-1 };
Int n, m, cnt;
Void bfs (int x, int y)
{
Int I;
Int xx, yy;
For (I = 0; I <4; I ++)
{
Xx = x + to [I] [0];
Yy = y + to [I] [1];
If (xx <0 | yy <0 | xx> = n | yy> = m | map [xx] [yy]! = '#')
Continue;
Map [xx] [yy] = '.';
Bfs (xx, yy );
}
}
Int main ()
{
Int t;
Scanf ("% d", & t );
While (t --)
{
Scanf ("% d", & n, & m );
Int I, j, l;
Cnt = 0;
For (I = 0; I <n; I ++)
{
Scanf ("% s", map [I]);
}
For (I = 0; I <n; I ++)
{
For (j = 0; j <m; j ++)
{
If (map [I] [j] = '#')
{
Cnt ++;
Map [I] [j] = '.';
Bfs (I, j );
}
}
}
Printf ("% d \ n", cnt );
}
Return 0;
}