Saturday, May 2, 2015

UVa - 10004 - Bicoloring

#include <bits/stdc++.h>
using namespace std;

int dirX[] = {1, 0, -1, 0, 1, -1, 1, -1};
int dirY[] = {0, 1, 0, -1, 1, -1, -1, 1};

int row, col, cnt, vis[103][103];
string grid[103];

int dfs(int i, int j){
    if(i < 0 || i >= row || j < 0 || j >= col || grid[i][j] == 'L' || vis[i][j])return 0;
    vis[i][j] = 1;
    cnt++;
    for(int z = 0; z < 8; z++){
        int px = i+dirX[z];
        int py = j+dirY[z];
        dfs(px, py);
    }
    return cnt;
}

int main(){
    int t, cs = 0;
    bool sp = false;
    string s;
    cin >> t;
    getchar();
    getchar();
    while(t--){
        int x, y;
        row = 0;
        if(sp)puts("");
        sp = true;
        while(getline(cin, s) && s.size()){
            if(s[0] == 'L' || s[0] == 'W'){
                grid[row] = s;
                col = grid[row++].size();
            }
            else{
                cnt = 0;
                istringstream cinn(s);
                cinn >> x;
                cinn >> y;
                memset(vis, 0, sizeof(vis));
                cout << dfs(x-1, y-1) << endl;
            }
        }
    }
    return 0;
}

No comments:

Post a Comment