• hdu 2952 Counting Sheep


    Counting Sheep

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
    Total Submission(s): 3524    Accepted Submission(s): 2366


    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
     
    #include <iostream>
    using namespace std;
    int n,m;
    char a[105][105];
    int d[4][2]={1,0,-1,0,0,1,0,-1};
    int s;
    bool safe (int x,int y)
    {
        if(x>n||y>m||x<=0||y<=0) return 0;
        return 1;
    }
    void dfs(int x,int y)
    {
        a[x][y]='.';
        int i;
        for(i=0;i<4;i++)
        {
            int xx=x+d[i][0];
            int yy=y+d[i][1];
            if(!safe(xx,yy))  continue;
            if(a[xx][yy]=='#')
            {
                a[xx][yy]='.';
                dfs(xx,yy);
            }
        }
    }
    int main()
    {
        int T,i,j;
        cin>>T;
        while(T--)
        {
            cin>>n>>m;
            s=0;
            for(i=1;i<=n;i++)
            {
                for(j=1;j<=m;j++)
                {
                    cin>>a[i][j];
                }
            }
            for(i=1;i<=n;i++)
            {
                for(j=1;j<=m;j++)
                {
                    if(a[i][j]=='#')
                    {
                        s++;
                         dfs(i,j);
                    }
                }
            }
            cout<<s<<endl;
        }
        return 0;
    }
  • 相关阅读:
    [ 原创 ] Oracle存储过程中使用游标进行多行数据输出
    [ 原创 ] Python解压版安装配置教程
    [ 转载 ] ORACLE存储过程
    [ 转载 ] Oracle存储过程及函数的练习题
    [ 原创 ] Oracle数据库一些基本命令
    [ 转载 ] Linux CentOS 查看操作系统版本信息
    [ 转载 ] Android开发中如何做单元测试
    [ 转载 ] 关于conn /as sysdba 无需密码直接可以连接的疑问
    [ 转载 ] oracle如何查看当前有哪些用户连接到数据库
    [ 转载 ] Oracle 内存(SGA,PGA)详细介绍
  • 原文地址:https://www.cnblogs.com/caiyishuai/p/13271268.html
Copyright © 2020-2023  润新知