题目大意:
和POJ 2386 Lake Counting相同,有多个测例,每个测例中给出池塘的规模n×m(1 ≤ n, m ≤ 100),'*'表示空白,'@'表示有水,测例以n, m = 0表示结束。
代码:
/*
* Problem ID : POJ 1562 Oil Deposits
* Author : Lirx.t.Una
* Language : C++
* Run Time : 0 ms
* Run Memory : 144 KB
*/
#include <iostream>
#include <cstdio>
#define MAXW 100
int n, m;
char mat[MAXW][MAXW + 1];
void
dfs( int x, int y ) {
int dx, dy;
int xx, yy;
if ( mat[x][y] != '@' ) return ;
mat[x][y] = '*';
for ( dx = -1; dx < 2; dx++ )
for ( dy = -1; dy < 2; dy++ ) {
xx = x + dx;
yy = y + dy;
if ( xx < 0 || xx >= n || yy < 0 || yy > m )
continue;
dfs( xx, yy );
}
}
int
main() {
int i, j;
int cnt;
while ( scanf("%d%d", &n, &m), n ) {
cnt = 0;
for ( i = 0; i < n; i++ ) scanf("%s", mat[i]);
for ( i = 0; i < n; i++ )
for ( j = 0; j < m; j++ )
if ( '@' == mat[i][j] ) {
dfs( i, j );
cnt++;
}
printf("%d\n", cnt);
}
return 0;
}