Cod sursa(job #1646679)

Utilizator bleo16783FMI Bleotiu Cristian bleo16783 Data 10 martie 2016 17:11:46
Problema Castel Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.42 kb
#include <iostream>
#include<fstream>
#include<queue>
using namespace std;
int n,m,i,j,k,nr,x,y,i0,j0,d,ok,n1;
bool v[22501];
int dx[4]={-1,0,1,0};
int dy[4]={0,1,0,-1};
struct camera
{
    bool ok;
    int x;
}a[151][151];
bool OK(int i,int j)
{
    if(i<1||j<1||n<i||m<j)return 0;
    if(a[i][j].ok)return 0;
    return 1;
}
queue <pair<int,int> >coada,coada1;
int main()
{
    ifstream f("castel.in");
    f>>n>>m>>k;for(i=1;i<=n;i++)for(j=1;j<=m;j++)f>>a[i][j].x;
    i0=(k-1)/m+1;
    j0=(k-1)%m+1;
    nr=1;v[k]=1;
    if(!v[a[i0][j0].x]){v[a[i0][j0].x]=1;nr++;}
    coada.push(make_pair(i0,j0));
    a[i0][j0].ok=1;
    ok=1;
    while(ok)
    {
        ok=0;
        for(i=1;i<=n;i++)for(j=1;j<=m;j++)a[i][j].ok=0;
        coada.push(make_pair(i0,j0));
        a[i0][j0].ok=1;ok=1;n1=1;
        while(!coada.empty())
        {
            x=coada.front().first;
            y=coada.front().second;
            coada.pop();
            for(d=0;d<4;d++)
            {
                i=x+dx[d];j=y+dy[d];k=a[i][j].x;
                if(OK(i,j)&&v[k])
                {
                    coada.push(make_pair(i,j));
                    k=(i-1)*m+j;v[k]=1;
                    a[i][j].ok=1;
                    n1++;
                }
            }
        }
        if(n1>nr){nr=n1;ok=1;}
        else ok=0;
    }
    ofstream g("castel.out");
    g<<nr;
    g.close();
    return 0;
}