Counting Sheep
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission (s): 1706 Accepted Submission (s): 1104
Problem DescriptionA 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.
InputThe 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.
OutputFor 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
24 4#.#..#.##.##.#.#3 5###.#..#..#.###
Sample Output
63
Code:
They all use deep searches. To perform extensive searches, why!
But the Memory Limit Exceeded! It's Memory! MLE! Kill it!
Locate # and mark the # Of this part. The principle is the same as that of deep search ~
# Include <stdio. h> # include <queue> # include <string. h ># include <iostream> using namespace std; typedef struct point {int x, y;} point; char sign [100] [100]; int n, m; int dir [4] [2] = {-, 0,-1}; void bfs (int a, int B) {queue <point> q; point p, head; p. x = a; p. y = B; q. push (p); int I; sign [a] [B] = 1; while (! Q. empty () {head = q. front (); q. pop (); for (I = 0; I <4; I ++) // Four Directions {point next; next. x = head. x + dir [I] [0]; next. y = head. y + dir [I] [1]; if (next. x> = 0 & next. x <n & next. y> = 0 & next. y <m &&! Sign [next. x] [next. y]) {q. push (next); sign [next. x] [next. y] = 1; // It is here !!! Changing the logo space cannot be used when you leave the team. Otherwise, MLE will be used when you judge to repeat. This is a legend! }}} Int main () {int t, I, j, count; char str [105]; scanf ("% d", & t); while (t --) {char str [105]; scanf ("% d", & n, & m); for (I = 0; I <n; I ++) {scanf ("% s", str); for (j = 0; j <m; j ++) {if (str [j] = '#') sign [I] [j] = 0; else sign [I] [j] = 1 ;}count = 0; for (I = 0; I <n; I ++) {for (j = 0; j <m; j ++) {if (sign [I] [j] = 0) {bfs (I, j); count ++; }}printf ("% d \ n", count);} return 0 ;}