• 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;
    } 
    

      

  • 相关阅读:
    IntelliJ IDEA教程之如何clean或者install Maven项目
    mysql 导出表,导出数据 命令
    import require
    https确实加密了。 抓包是一个中间人攻击过程
    密码学部分算法
    账号密码加密的方案
    查看git提交细节
    使用源安装java JDK
    updated stream stash changes
    Hibernate与Jpa的关系
  • 原文地址:https://www.cnblogs.com/lijiaxin-blog-cpp/p/6213712.html
Copyright © 2020-2023  润新知