UVa 11094 - Continents Solution

#include <algorithm>
#include <vector>
#include <iostream>
// #include <string>
using namespace std;
int dirx[]={1,-1,0,0};
int diry[]={0,0,1,-1};//right,left,up,down
int m,n,x,y;
char l,w;
vector<vector<char> > a;
vector<vector<int> > vis;
int flood(int i,int j){
    j=(j+n)%n;
    if(i<0||i>=m) return 0;
    if(vis[i][j]) return 0;
    vis[i][j]=1;
    if (a[i][j]!=l) return 0;
    return 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]);
}
int main(){
    while(cin>>m>>n){
        a.assign(m,vector<char>(n));
        vis.assign(m,vector<int>(n));
        for(int i=0;i<m;i++){
            cin>>ws;
            for(int j=0;j<n;j++){
                cin>>a[i][j];
                l=a[0][0];
                if(a[i][j]!=l)
                    w=a[i][j];
            }
        }
        cin>>x>>y;
        if(l!=a[x][y]){
            char tmp=l;
            l=w;
            w=tmp;
        }
        flood(x,y);
        int ans=0,tans;
        for(int i=0;i<m;i++){
            for(int j=0;j<n;j++){
                tans=flood(i,j);
                if(tans>ans)
                    ans=tans;
            }
        }
        cout<<ans<<endl;
    }
}

Comments