P1596 [USACO10OCT]Lake Counting S(八连通问题)
作者:互联网
由于近期的降雨,雨水汇集在农民约翰的田地不同的地方。我们用一个NxM(1<=N<=100;1<=M<=100)网格图表示。每个网格中有水('W') 或是旱地('.')。一个网格与其周围的八个网格相连,而一组相连的网格视为一个水坑。约翰想弄清楚他的田地已经形成了多少水坑。给出约翰田地的示意图,确定当中有多少水坑。
输入格式
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.
第1行:两个空格隔开的整数:N 和 M 第2行到第N+1行:每行M个字符,每个字符是'W'或'.',它们表示网格图中的一排。字符之间没有空格。
输出格式
一行:水坑的数量
输入输出样例
输入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
#include <bits/stdc++.h> using namespace std; int n, m; char a[1000][1000]; int ans; void dfs(int x, int y) { a[x][y] = '.'; for(int i = -1; i <= 1; i++){ for(int j = -1; j <= 1; j++) { int dx = x + i; int dy = y + j; if (dx < 0 || dx >= n || dy < 0 || dy >= m) continue; if (a[dx][dy] == '.') continue; dfs(dx, dy); } } } int main() { //freopen("in", "r", stdin); ios::sync_with_stdio(0); cin >> n >> m; for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { cin >> a[i][j]; } } for (int i = 0; i < n; i++) { for (int j = 0; j < m; j++) { if(a[i][j]=='W'){ dfs(i,j); ans++; } } } cout << ans << endl; return 0; }
标签:P1596,..,int,Lake,WW,++,.....,USACO10OCT,dy 来源: https://www.cnblogs.com/xcfxcf/p/12727167.html