// UVa 469 - Wetlands of Florida #include <iostream> #include <vector> #include <string> #include <string.h> #include <sstream> using namespace std; int move[8][2] = { { -1, -1 }, { -1, 0 }, { -1, 1 }, { 0, -1 }, { 0, 1 }, { 1, -1 }, { 1, 0 }, { 1, 1 } }; int cmp, n, m; vector<string> grid; int comp[100][100]; int count[10001]; void dfs(int a, int b) { grid[a][b] = 'L'; comp[a][b] = cmp; count[cmp]++; for (int k = 0; k < 8; k++) { int x = a + move[k][0]; int y = b + move[k][1]; if (x >= 0 && x < n && y >= 0 && y < m && grid[x][y] == 'W') dfs(x, y); } } int main() { int t; cin >> t; string l; getline(cin, l); getline(cin, l); for (; t; t--) { getline(cin, l); grid.clear(); while (l[0] == 'L' || l[0] == 'W') { grid.push_back(l); getline(cin, l); } n = grid.size(); m = grid[0].length(); cmp = 0; memset(comp, 0, sizeof(comp)); while (cin && l.length() > 0) { istringstream strm(l); int a, b; strm >> a >> b; if (a < 1 || a > n || b < 1 || b > m || comp[a - 1][b - 1] == 0 && grid[a - 1][b - 1] == 'L') cout << 0 << endl; else { if (comp[a - 1][b - 1] == 0) { cmp++; count[cmp] = 0; dfs(a - 1, b - 1); cout << count[comp[a - 1][b - 1]] << endl; } else cout << count[comp[a - 1][b - 1]] << endl; } getline(cin, l); } if (t > 1) cout << endl; } return 0; }
Monday, June 8, 2015
UVa 469 - Wetlands of Florida
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment