题目大意:这个也是关于Flood fill的,给一个0和1构成的矩阵,指定一个位置(该位置值为1),计算包含该位置的连通分量中元素的个数。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include <cstdio> 2 #include <cctype> 3 #include <cstring> 4 #define MAXN 110 5 6 int G[MAXN][MAXN]; 7 bool vis[MAXN][MAXN]; 8 int n, m, ans; 9 10 void dfs(int x, int y) 11 { 12 if (x < 0 || x >= n || y < 0 || y >= m || vis[x][y] || !G[x][y]) return; 13 vis[x][y] = 1; 14 ans++; 15 dfs(x-1, y-1); dfs(x-1, y); dfs(x-1, y+1); 16 dfs(x, y-1); dfs(x, y+1); 17 dfs(x+1, y-1); dfs(x+1, y); dfs(x+1, y+1); 18 } 19 20 int main() 21 { 22 #ifdef LOCAL 23 freopen("in", "r", stdin); 24 #endif 25 int T; 26 scanf("%d", &T); 27 getchar(); 28 char str[150]; 29 gets(str); 30 while (T--) 31 { 32 n = 0; 33 while (gets(str)) 34 { 35 if (isdigit(str[0])) break; 36 m = strlen(str); 37 for (int i = 0; i < m; i++) 38 { 39 if (str[i] == 'L') G[n][i] = 0; 40 else if (str[i] == 'W') G[n][i] = 1; 41 } 42 n++; 43 } 44 int x, y; 45 do 46 { 47 sscanf(str, "%d%d", &x, &y); 48 x--; 49 y--; 50 ans = 0; 51 memset(vis, 0, sizeof(vis)); 52 dfs(x, y); 53 printf("%d ", ans); 54 } while (gets(str) && str[0]); 55 if (T) printf(" "); 56 } 57 return 0; 58 }