POJ_2386: Lake Counting
来源:互联网 发布:动网论坛 php 编辑:程序博客网 时间:2024/05/17 23:50
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.
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.
* 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 12W........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.
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数连通分量个数。
#include<stdio.h>#define LAND -1#define WATER 1int N,M;int graph[101][101];int visited[101][101];void dfs(int startA,int startB){visited[startA][startB]=true;if(startA-1>=0 && !visited[startA-1][startB] && graph[startA-1][startB]==WATER)dfs(startA-1,startB);if(startA+1<N && !visited[startA+1][startB] && graph[startA+1][startB]==WATER)dfs(startA+1,startB);if(startB-1>=0 && !visited[startA][startB-1] && graph[startA][startB-1]==WATER)dfs(startA,startB-1);if(startB+1<M && !visited[startA][startB+1] && graph[startA][startB+1]==WATER)dfs(startA,startB+1);if(startA-1>=0 && startB-1>=0 && !visited[startA-1][startB-1] && graph[startA-1][startB-1]==WATER)dfs(startA-1,startB-1);if(startA-1>=0 && startB+1<M && !visited[startA-1][startB+1] && graph[startA-1][startB+1]==WATER)dfs(startA-1,startB+1);if(startA+1<N && startB-1>=0 && !visited[startA+1][startB-1] && graph[startA+1][startB-1]==WATER)dfs(startA+1,startB-1);if(startA+1<N && startB+1<M && !visited[startA+1][startB+1] && graph[startA+1][startB+1]==WATER)dfs(startA+1,startB+1);}int main(){scanf("%d %d",&N,&M);getchar();for(int i=0;i<N;i++){for(int j=0;j<M;j++){char c;c=getchar();if(c=='.')graph[i][j]=LAND;else if(c=='W')graph[i][j]=WATER;visited[i][j]=false;}getchar();}//count connected components using dfsint count=0;for(int i=0;i<N;i++)for(int j=0;j<M;j++){if(!visited[i][j] && graph[i][j]==WATER){dfs(i,j);count++;}}printf("%d\n",count);return 0;}
- POJ_2386: Lake Counting
- Lake Counting
- Lake Counting
- Lake Counting
- Lake Counting
- Lake Counting
- lake counting
- Lake Counting
- Lake Counting
- Lake Counting
- Lake counting
- Lake Counting
- Lake Counting
- Lake Counting
- Lake Counting
- Lake Counting
- Lake Counting
- Lake Counting
- hdu 2100 Lovekey
- Android 界面状态的一点技巧
- 插入排序
- cygwin安装步骤以及注意事项
- 二进制按位翻转
- POJ_2386: Lake Counting
- JAVA面向对象的三大特性
- 题目1056:最大公约数
- 黑马程序员_java基础知识一
- 有关const
- 个人笔记 - Oracle EBS 常用SQL
- KVO/KVC系列之一——什么是KVC
- apache配置
- 黑马程序员 <梦想之旅九>路灯系统设计