Cod sursa(job #1153407)

Utilizator tytus11Trifon Titus tytus11 Data 25 martie 2014 14:07:59
Problema Castel Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.29 kb
#include <cstdio>
#include <queue>

using namespace std;

queue <int>c[22503];

int x[30001],y[30001],chei[30000];

int main()
{
    int n,m,ok,nr,op,sum,i,j;
    FILE *f=fopen("castel.in","r");
    FILE *g=fopen("castel.out","w");
    fscanf(f,"%d%d%d",&n,&m,&op);
    for(i=1; i<=n*m; ++i)
        fscanf(f,"%d",&x[i]);
    chei[1]=op;
    int kap,k[4];
    k[1]=1;
    k[2]=m;
    k[3]=-1;
    k[0]=m*(-1);
    for(kap=0; kap<=3; ++kap)
    {
        if((op+k[kap])>=1&&(op+k[kap])<=n*m&&((op+k[kap])%m!=1||kap!=3)&&((op+k[kap])%m!=0||kap!=1))
        {
            c[x[op+k[kap]]].push(op+k[kap]);
        }
    }
    int nchei=1;
    int a;
    ok=0;
    while(ok==0)
    {
        ok=1;
        for(i=1; i<=nchei; ++i)
        {
            while(!c[chei[i]].empty())
            {
                ok=0;
                a=c[chei[i]].front();
                ++nchei;
                chei[nchei]=a;
                for(kap=0; kap<=3; ++kap)
                {
                    if(  (a+k[kap])>0  &&  (a+k[kap])<=n*m  &&  ((a+k[kap])%m!=1||kap!=3)  &&  ((a+k[kap])%m!=0||kap!=1)  )
                        c[x[a+k[kap]]].push(a+k[kap]);
                }
                c[chei[i]].pop();
            }
        }
    }
    fprintf(g,"%d\n",nchei);
    return 0;
}