zoukankan      html  css  js  c++  java
  • 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
    ",number);
                
                
    
            }
        }
    
        return 0;
    }

  • 相关阅读:
    作品第二课----改变DIV任意属性的值
    今天遇到的mouseout和mouseleave之坑
    作品第二课----弹出层
    作品第二课----求数组中所有数字的和
    作品第二课----点击DIV显示其内容
    作品第二课----点击切换显示隐藏
    Linux 静态库与动态库
    Linux学习6-套接字
    Linux学习5-线程
    Linux学习4-信号
  • 原文地址:https://www.cnblogs.com/2013lzm/p/3264574.html
Copyright © 2011-2022 走看看