Cod sursa(job #2522340)

Utilizator BogauuuBogdan Ivancu Bogauuu Data 12 ianuarie 2020 13:18:15
Problema Castel Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.35 kb
#include <fstream>

using namespace std;

ifstream fin("castel.in");
ofstream fout("castel.out");

int di[]={-1,0,1,0};
int dj[]={0,1,0,-1};

int n,m;

int detl(int k)
{
    int l=k/m+1;
    if (k%m==0) l--;
    return l;
}

int detc(int k)
{
    int c=k%m;
    if (k%m==0) c=m;
    return c;
}

int detk(int l, int c)
{
    int k=(l-1)*m;
    k=k+c;
    return k;
}

int k,l,c,st,dr,af,i,j,x,y,vx,vy,d,hh,a[155][155],cl[22505],cc[22505];
bool v[22505],ok;

int main()
{
    fin >> n >> m >> k;
    l=detl(k);
    c=detc(k);
    v[k]=1;
    for (i=1;i<=n;i++) for (j=1;j<=m;j++) fin >> a[i][j];
    cl[1]=l;
    cc[1]=c;
    a[l][c]=0;
    st=dr=1;
    af=1;
    while (st<=dr)
    {
        x=cl[st];
        y=cc[st];
        for (d=0;d<4;d++)
        {
            vx=x+di[d];
            vy=y+dj[d];
            k=a[vx][vy];
            if (vx>=1 && vx<=n && vy>=1 && vy<=m && v[k]==1 && a[vx][vy]!=0)
            {
                af++;
                a[vx][vy]=0;
                dr++;
                cl[dr]=vx;
                cc[dr]=vy;
                hh=detk(vx,vy);
                if (v[hh]==0) ok=1;
                v[hh]=1;
            }
        }
        st++;
        if (st>dr && ok==1)
        {
            st=1;
            ok=0;
        }
    }
    fout << af;

    return 0;
}