zoukankan      html  css  js  c++  java
  • 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;
    }
  • 相关阅读:
    Android 学习笔记之WebService实现远程调用+内部原理分析...
    Android学习笔记之Json的使用....
    Android学习笔记之DocumentBuilder的使用....
    Android学习笔记之ExecutorService线程池的应用....
    Android学习笔记之SoftReference软引用...
    windows系统获取进程的pid号并终止
    Linux系统的时间比北京时间慢12个小时的处理方案(将EDT时区改为CST)
    将java的jar包作为windows的服务来启动
    linux初始化shell脚本
    linux中网络部分的总结
  • 原文地址:https://www.cnblogs.com/caiyishuai/p/8411184.html
Copyright © 2011-2022 走看看