Cod sursa(job #1156033)

Utilizator tytus11Trifon Titus tytus11 Data 27 martie 2014 12:55:40
Problema Castel Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.49 kb
#include <cstdio>
#include <queue>

using namespace std;

queue <int>c[22503];

int x[30001],y[30001],chei[30000],trec[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);
    trec[op]=1;
    for(kap=0; kap<=3; ++kap)
    {
        if((op+k[kap])>=1&&(op+k[kap])<=n*m&&(op%m!=1||kap!=3)&&(op%m!=0||kap!=1))
        {
            c[x[op+k[kap]]].push(op+k[kap]);
            trec[op+k[kap]]=1;
        }
    }
    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%m!=1||kap!=3)  &&  (a%m!=0||kap!=1) && (trec[a+k[kap]]!=1) )
                    {
                        c[x[a+k[kap]]].push(a+k[kap]);
                        trec[a+k[kap]]=1;
                    }
                }
                c[chei[i]].pop();
            }
        }
    }
   // for(i=1;i<=nchei;++i){
   // fprintf(g,"%d ",chei[i]);}
    fprintf(g,"%d\n",nchei);
    return 0;
}