zoukankan      html  css  js  c++  java
  • 2386:Lake Counting-poj

    总时间限制: 
    1000ms
     
    内存限制: 
    65536kB
    描述
    Due to recent rains, water has pooled in various places in Farmer John's field, which is represented by a rectangle of N x M (1 <= N <= 100; 1 <= M <= 100) squares. Each square contains either water ('W') or dry land ('.'). Farmer John would like to figure out how many ponds have formed in his field. A pond is a connected set of squares with water in them, where a square is considered adjacent to all eight of its neighbors.

    Given a diagram of Farmer John's field, determine how many ponds he has.
    输入
    * Line 1: Two space-separated integers: N and M

    * Lines 2..N+1: M characters per line representing one row of Farmer John's field. Each character is either 'W' or '.'. The characters do not have spaces between them.
    输出
    * Line 1: The number of ponds in Farmer John's field.
    样例输入
    10 12
    W........WW.
    .WWW.....WWW
    ....WW...WW.
    .........WW.
    .........W..
    ..W......W..
    .W.W.....WW.
    W.W.W.....W.
    .W.W......W.
    ..W.......W.
    样例输出
    3
    提示
    OUTPUT DETAILS:

    There are three ponds: one in the upper left, one in the lower left,and one along the right side.
    代码:递归 搜索
    #include<stdio.h>
    
    int n,m;
    char map[110][110];
    int go[8][2]={{-1,-1},{-1,0},{-1,1},{0,-1},{0,1},{1,-1},{1,0},{1,1}};//方向数组,上下左右--八个方向
    void dfs(int x,int y)
    {
            map[x][y]='.';//标记已经走过的节点
        for(int i=1;i<=8;i++)
        {
            int nx=x+go[i-1][0];//搜索上下左右斜边八个方向
            int ny=y+go[i-1][1];
            if(nx>=0&&nx<n&&ny>=0&&ny<m&&map[nx][ny]=='W')//遇到w并且没有越界  就一直遍历下去
                dfs(nx,ny);
        }
    
    }
    
    int main(void)
    {
        int i,j,k;
        while(scanf("%d%d",&n,&m)==2)
        {
            getchar();
            k=0;
            for(i=0; i<n; i++)
            {
                for(j=0; j<m; j++)
                {
                    scanf("%c",&map[i][j]);
                }
                getchar();
            }
            for(i=0; i<n; i++)
                for(j=0; j<m; j++)
                    if(map[i][j]=='W')
                    {
                        dfs(i,j);
                        k++;//每次找到一个水域,计数值增加1
                    }
                    printf("%d
    ",k);
        }
        return 0;
    }
    以大多数人努力程度之低,根本轮不到去拼天赋~
  • 相关阅读:
    简单的纯css菜单
    提高 web 应用性能之 JavaScript 性能调优(转)
    从拖延者到行动派的10个秘诀(转)
    程序员,你应该知道(转)
    幽默的经济学+组织领导学
    [SQL基础]统计信息解释
    演讲集合
    最隐晦的程序设计指引(转)
    windows 7 "unmountable boot volume" 解决方法
    kafka与springboot集成2
  • 原文地址:https://www.cnblogs.com/gcter/p/7412996.html
Copyright © 2011-2022 走看看