Cod sursa(job #1146842)

Utilizator patrixKovacs Patrik patrix Data 19 martie 2014 12:41:19
Problema Castel Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.71 kb
#include <fstream>

using namespace std;
ifstream f("castel.in");
ofstream g("castel.out");
const short xx[5]={0,1,-1,0,0};
const short yy[5]={0,0,0,1,-1};
struct adat
{
    short x,y;
    bool l;
};
bool y[25505],b[155][155];
adat v[25505],szel[25505];
int n,m,i,j,a[155][155],eleje,vege,aktx,akty,ujx,ujy,szvege,k,c[155][155],t,q,w;
int ell()
{
    return ujx>=1 && ujy>=1 && ujx<=n && ujy<=m;
}
int szelessegi (int kezdi,int kezdj)
{
    eleje=1;
    vege=1;
    v[1].x=kezdi;
    v[1].y=kezdj;
    b[kezdi][kezdj]=1;
    while (eleje<=vege)
    {
        aktx=v[eleje].x;
        akty=v[eleje].y;
        y[c[aktx][akty]]=1;
        for (int i=1;i<=szvege;i++)
        if (!szel[i].l && c[aktx][akty]==a[szel[i].x][szel[i].y])
        {
            vege++;
            v[vege].x=szel[i].x;
            v[vege].y=szel[i].y;
            szel[i].l=1;
            b[v[vege].x][v[vege].y]=1;
        }
        for (k=1;k<=4;k++)
        {
            ujx=aktx+xx[k];
            ujy=akty+yy[k];
            if (ell())
            {if (y[a[ujx][ujy]] && !b[ujx][ujy])
            {
                vege++;
                v[vege].x=ujx;
                v[vege].y=ujy;
                b[ujx][ujy]=1;
            }
            else
            if (!y[a[ujx][ujy]])
            {
                szvege++;
                szel[szvege].x=ujx;
                szel[szvege].y=ujy;
            }}
        }
        eleje++;
    }
}
int main()
{
    f>>n>>m>>k;
    for (i=1;i<=n;i++)
    for (j=1;j<=m;j++)
    {
        f>>a[i][j];
        t++;
        if (t==k)
        {
            q=i;
            w=j;
        }
        c[i][j]=t;
    }
    szelessegi(q,w);
    g<<vege-1;
}