POJ - 2386:Lake Counting


Lake Counting
出典:POJ
ラベル:
参考資料:
類似タイトル:
タイトル
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
    const int maxn=100+10;
    char arr[maxn][maxn];
    int vis[maxn][maxn];
    int n,m; 
    void dfs(int x,int y)
    {
    	vis[x][y]=1;//     arr[i][j]='.'; 
    	for(int i=-1;i<=1;i++)
    	{
    		for(int j=-1;j<=1;j++)
    		{
    			int nx=x+i,ny=y+j;
    			if(0<=nx && nx<n && 0<=ny && ny<m && arr[nx][ny]=='W' && !vis[nx][ny])
    				dfs(nx,ny);
    		}
    	}
    }
    int main()
    {
    	scanf("%d%d",&n,&m);
    	int i,j;
    	for(i=0;i<n;i++)
    		scanf("%s",arr[i]);
    	int cnt=0;
    	for(i=0;i<n;i++)
    	{
    		for(j=0;j<m;j++)
    		{
    			if(arr[i][j]=='W' && !vis[i][j])
    			{
    				dfs(i,j);
    				cnt++;
    			}
    		}
    	}
    	printf("%d
    "
    ,cnt); return 0; }