• 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;
    }
    以大多数人努力程度之低,根本轮不到去拼天赋~
  • 相关阅读:
    win shift s截图不能用(已解决)
    阿里云ssl证书过期怎么解决 (免费SSL证书) 三步解决
    图解 Java 数据结构
    微信小程序简介
    序列化类外键字段的覆盖,十大接口序列化总结,视图家族
    response二次封装,夺标关系优化,多表序列化,十大接口
    内部类,drf响应类,序列化与反序列化
    drf以及django应用
    DRF框架知识总览
    实例成员:计算属性 监听属性以及vue的项目开发
  • 原文地址:https://www.cnblogs.com/gcter/p/7412996.html
Copyright © 2020-2023  润新知