zoukankan      html  css  js  c++  java
  • poj2386 Lake Counting(简单DFS)

    转载请注明出处:http://blog.csdn.net/u012860063?viewmode=contents

    题目链接:http://poj.org/problem?id=1562


    ----------------------------------------------------------------------------------------------------------------------------------------------------------
    欢迎光临天资小屋害羞害羞害羞害羞http://user.qzone.qq.com/593830943/main
    
    
    ----------------------------------------------------------------------------------------------------------------------------------------------------------


    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

    代码例如以下:

    #include <iostream>
    #include <algorithm>
    using namespace std;
    #include <cstring>
    #define TM 100+17
    int N, M;
    char map[TM][TM];
    bool vis[TM][TM];
    int xx[8]={0,1,1,1,0,-1,-1,-1};
    int yy[8]={1,1,0,-1,-1,-1,0,1};
    void DFS(int x, int y)
    {
    	vis[x][y] = true;
    	for(int i = 0; i < 8; i++)
    	{
    		int dx = x+xx[i];
    		int dy = y+yy[i];
    		if(dx>=0&&dx<N&&dy>=0&&dy<M&&!vis[dx][dy]&&map[dx][dy] == 'W')
    		{
    			vis[dx][dy] = true;
    			DFS(dx,dy);
    		}
    	}
    }
    int main()
    {
    	int i, j;
    	while(cin>>N>>M)
    	{
    		int count = 0;
    		memset(vis,false,sizeof(vis));
    		for(i = 0; i< N; i++)
    		{
    			cin>>map[i];
    		}
    		for(i = 0; i < N; i++)
    		{
    			for(j = 0; j < M; j++)
    			{
    				if(map[i][j] == 'W' && !vis[i][j])
    				{
    					count++;
    					DFS(i,j);
    				}
    			}
    		}
    		cout<<count<<endl;
    	}
    	return 0;
    }


    版权声明:本文博客原创文章,博客,未经同意,不得转载。

  • 相关阅读:
    ArcGIS API 之 MapPoint & MultiPoint
    前台特效(6) 折叠栏目(动画效果)
    网站开发人员应该知道的61件事[转载]
    前台特效(1)鼠标改变透明度
    php 常用字符编码转换函数整理
    php导入sql文件
    前台特效(3) 编辑表格
    前台特效(2)回到顶部
    时间函数strtotime
    前台特效(4) 悬浮移动窗口(悬浮广告)
  • 原文地址:https://www.cnblogs.com/yxwkf/p/4651349.html
Copyright © 2011-2022 走看看