• HDU-2952 Counting Sheep (DFS)


                               Counting Sheep

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

    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
     1 #include <stdio.h>  
     2 #include <string.h>  
     3  char map[105][105]; 
     4 int f[4][2] = {1,0,-1,0,0,1,0,-1}; //注意定义方向数组。只有四个方向上下左右。
     5 int n,m,s; 
     6 void dfs(int x,int y) 
     7 { 
     8     int i; 
     9     int x1,y1; 
    10     for(i = 0;i<4;i++) 
    11     { 
    12         x1= x+f[i][0]; 
    13         y1 = y+f[i][1]; 
    14         if(x1<0 || y1<0 || x1>=n || y1>=m || map[x1][y1]!='#') 
    15         continue; 
    16         map[x1][y1] = '.'; 
    17         dfs(x1,y1); 
    18     } 
    19 } 
    20  
    21 int main() 
    22 { 
    23     int t; 
    24     scanf("%d",&t); 
    25     while(t--) 
    26     { 
    27         scanf("%d%d",&n,&m); 
    28         int i,j,l; 
    29         s = 0; 
    30         for(i = 0;i<n;i++) 
    31         { 
    32             scanf("%s",map[i]); 
    33         } 
    34         for(i = 0;i<n;i++) 
    35         { 
    36             for(j = 0;j<m;j++) 
    37             { 
    38                 if(map[i][j] == '#') 
    39                 { 
    40                     s++; 
    41                     map[i][j] = '.'; 
    42                     dfs(i,j); 
    43                 } 
    44             } 
    45         } 
    46         printf("%d
    ",s); 
    47     } 
    48  
    49     return 0; 
    50 }
  • 相关阅读:
    ==和equals的比较
    有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
    while循环打印*菱形
    switch语句可以接受哪几种数据类型
    如何在不介入第三个变量的情况下实现两个数的交换
    HDU 1003 Max Sum --- 经典DP
    HDU 2717 Catch That Cow --- BFS
    POJ 2251 Dungeon Master --- 三维BFS(用BFS求最短路)
    HDU 2096 小明A+B --- 水题
    HDU 2095 find your present (2)
  • 原文地址:https://www.cnblogs.com/cancangood/p/3278887.html
Copyright © 2020-2023  润新知