UVa 11953 Battleships Solution

#include <algorithm>
#include <vector>
#include <iostream>
using namespace std;
int dirx[]={1,-1,0,0};
int diry[]={0,0,1,-1};//right,left,up,down
int n;
vector<vector<char> > a;
vector<vector<int> > vis;
int flood(int i,int j){
    if(i<0||i==n||j<0||j==n||vis[i][j]||a[i][j]=='.') return 0;
    vis[i][j]=1;
    flood(i+dirx[0],j+diry[0]);
    flood(i+dirx[1],j+diry[1]);
    flood(i+dirx[2],j+diry[2]);
    flood(i+dirx[3],j+diry[3]);
    return 1;
}
int main(){
    int t,cs=0;
    cin>>t;
    while(t--){
        cin>>n;
        a.assign(n,vector<char>(n));
        vis.assign(n,vector<int>(n));
        for(int i=0;i<n;i++){
            cin>>ws;
            for(int j=0;j<n;j++){
                cin>>a[i][j];
            }
        }
        int ans=0;
        for(int i=0;i<n;i++){
            for(int j=0;j<n;j++){
                if(a[i][j]=='x')
                    ans+=flood(i,j);
            }
        }
        cout<<"Case "<<++cs<<": "<<ans<<endl;
    }

}

Comments