Counting Sheep

Counting Sheep

Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other)
Total Submission(s) : 28   Accepted Submission(s) : 24

Font: Times New Roman | Verdana | Georgia

Font Size:

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 0 < T <= 100 0 < H,W <= 100

Sample Input

2
4 4
#.#.
.#.#
#.##
.#.#
3 5
###.#
..#..
#.###

Sample Output

6
3

Source

IDI Open 2009
这题也是 水题;
深搜广搜都可以
#include<iostream>
#include<stack>
#include<algorithm>
using namespace std;
char map[105][105];
int fang[4][2]={1,0,0,1,-1,0,0,-1};
struct sheep
{
    int x;
    int y;


};
int main()
{
    int n;
    int h,w;
    while(scanf("%d",&n)!=EOF)
    {
        while(n--)
        {
            int number=0;
            memset(map,'.',sizeof(map));
            stack<sheep> st;
            scanf("%d %d",&h,&w);//行数 列数
            int i,j;
            for(i=0;i<h;i++)
            {
                for(j=0;j<w;j++)
                {
                    cin>>map[i][j];
                
                }
            
            }//输入结束

            for(i=0;i<h;i++)
            {
                for(j=0;j<w;j++)
                {
                    if(map[i][j]=='#')
                    {
                        number++;
                        sheep num;
                        num.x=i;
                        num.y=j;
                        st.push(num);
                        while(!st.empty())
                        {
                            sheep num2;
                            num2=st.top();
                            st.pop();
                            if(num2.x>=0&&num2.x<h&&num2.y>=0&&num2.y<w)
                            {
                             if(map[num2.x][num2.y]=='#')
                             {
                                map[num2.x][num2.y]='.';
                                int k;
                                for(k=0;k<4;k++)
                                {
                                   sheep num3;
                                   num3.x=num2.x+fang[k][0];
                                   num3.y=num2.y+fang[k][1];
                                   st.push(num3);
                                    
                                
                                
                                }
                            
                             }

                            }
                    
                        }//栈空了
                    
                    
                    
                    }
                
                
                }
            
            }
            printf("%d\n",number);
            
            

        }
    }

    return 0;
}

 


posted @ 2013-08-17 15:29  一只蚊子  阅读(227)  评论(0编辑  收藏  举报