Cod sursa(job #1146920)

Utilizator patrixKovacs Patrik patrix Data 19 martie 2014 13:45:30
Problema Castel Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.08 kb
#include <fstream>
#include <algorithm>
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 comp(adat a,adat b)
{
    return a.l>b.l;
}
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 torol(int poz)
{
    for (int i=poz+1;i<=szvege;i++)
    szel[i-1]=szel[i];
    szvege--;
}
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 (k=1;k<=4;k++)
        {
            ujx=aktx+xx[k];
            ujy=akty+yy[k];
            if (!b[ujx][ujy] && ell())
            {
            if (y[a[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;
                b[szel[szvege].x][szel[szvege].y]=1;
            }
            }
        }
        for (int i=1;i<=szvege;i++)
        if (c[aktx][akty]==a[szel[i].x][szel[i].y])
        {
            vege++;
            v[vege].x=szel[i].x;
            v[vege].y=szel[i].y;
            torol(i);
            i--;
        }
        eleje++;
    }

}
int main()
{
    f>>n>>m>>k;
    for (i=1;i<=n;i++)
    for (j=1;j<=m;j++)
    {
        f>>a[i][j];
        t++;
        c[i][j]=t;
    }
    if (k%m==0)
    szelessegi(k/m,m);
    else
    szelessegi(k/m+1,k%m);
    /*for (i=1;i<=n;i++)
    {
        for (j=1;j<=m;j++)
        g<<b[i][j]<<" ";
        g<<"\n";
    }*/
    /*for (i=1;i<=vege;i++)
    g<<v[i].x<<" "<<v[i].y<<"\n";*/
    g<<vege;
}