zoukankan      html  css  js  c++  java
  • POJ No.2386【B007】

    【B007】Lake Counting【难度B】——————————————————————————————————————————

    【Description】

            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.

    【Input】

            * 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.

    【Output】

            * Line 1: The number of ponds in Farmer John's field.

    【Sample Input】

    10 12
    W........WW.
    .WWW.....WWW
    ....WW...WW.
    .........WW.
    .........W..
    ..W......W..
    .W.W.....WW.
    W.W.W.....W.
    .W.W......W.
    ..W.......W.
    

    【Sample Output】

    3
    

    【Hint】

            OUTPUT DETAILS: 
            There are three ponds: one in the upper left, one in the lower left,and one along the right side.

    【Source】

           USACO 2004 November

    【分析】

           不要被那么一大串英文吓到,这就是一个统计八连快。。。。。。果断DFS,秒A。。。。。。

    【代码】

    #include<iostream>
    using namespace std;
    const int maxn=101;
    const int maxm=101;
    int n,m;
    char field[maxn][maxm];
    void dfs(int x,int y)
    {
        field[x][y]='.';
        for(int dx=-1;dx<=1;dx++)
        {
            for(int dy=-1;dy<=1;dy++)
            {
            	int nx=x+dx,ny=y+dy;
            	if(0<=nx && nx<n && 0<=ny && ny<m && field[nx][ny]=='W') dfs(nx,ny);
    		}
    	}
    	return ;
    }
    int main()
    {
        int res=0;
        cin>>n>>m;
        for(int i=0;i<n;i++)
            for(int j=0;j<m;j++)
                cin>>field[i][j];
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<m;j++)
            {
                if(field[i][j]=='W')
                {
    		        dfs(i,j);
    				res++; 
    			}
    		}
        }
        cout<<res;
    	return 0;
    } 
    

      

  • 相关阅读:
    论语言思维的差异
    lua经典问题
    跳槽的故事
    未来一年计划
    腾讯面试题 找重复的数
    nodejs学习
    node记录
    mysql 常用总结
    ubuntu 服务器搭建汇总
    ubuntu下安装golang
  • 原文地址:https://www.cnblogs.com/lijiaxin-blog-cpp/p/6213712.html
Copyright © 2011-2022 走看看