Cod sursa(job #1152926)

Utilizator tytus11Trifon Titus tytus11 Data 25 martie 2014 09:16:37
Problema Castel Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.94 kb
#include <cstdio>

using namespace std;

int x[159][159],y[160][160],z[160][160],chei[30000],cam[30000],cam2[30000];

int main()
{
    int n,m,k,op,nr,i,j,sum,li,ci;
    FILE *f=fopen("castel.in","r");
    FILE *g=fopen("castel.out","w");
    fscanf(f,"%d%d%d",&n,&m,&k);
    for(i=1; i<=n; ++i)
        for(j=1; j<=m; ++j)
        {
            fscanf(f,"%d",&x[i][j]);
        }
    li=(k-1)/m+1;
    ci=(k-1)%m+1;
    for(i=1; i<=n; ++i)
        for(j=1; j<=m; ++j)
            z[i][j]=(i-1)*m+j;
    int k1[4]= {0,0,1,-1},k2[4]= {-1,1,0,0},nchei,ncam;
    for(i=1; i<=n; ++i)
        x[i][0]=x[i][m+1]=-1;
    for(i=1; i<=m; ++i)
        x[0][i]=x[n+1][i]=-1;
    nchei=1;
    chei[1]=x[li][ci];
    y[li][ci]=1;
    int ok=0;
    ncam=0;
    int kap;
    for(kap=0; kap<=3; ++kap)
        if(x[li+k1[kap]][ci+k2[kap]]!=-1&&y[li+k1[kap]][ci+k2[kap]]!=1)
        {
            ++ncam;
            cam[ncam]=li+k1[kap];
            cam2[ncam]=ci+k2[kap];
            y[cam[ncam]][cam2[ncam]]=1;
        }
    while(ok==0)
    {
        ok=1;
        for(i=1; i<=nchei; ++i)
        {
            for(j=1; j<=ncam; ++j)
            {
                if(chei[i]==x[cam[j]][cam2[j]]&&cam[j]!=0)
                {
                    ok=0;
                    ++nchei;
                    chei[nchei]=(cam[j]-1)*n+cam2[j]-1;
                    for(kap=0; kap<=3; ++kap)
                    {
                        if(x[cam[j]+k1[kap]][cam2[j]+k2[kap]]!=-1&&y[cam[j]+k1[kap]][cam2[j]+k2[kap]]!=1)
                        {
                            ++ncam;
                            cam[ncam]=cam[j]+k1[kap];
                            cam2[ncam]=cam2[j]+k2[kap];
                            y[cam[ncam]][cam2[ncam]]=1;
                        }
                    }
                    cam[j]=0;
                }
            }
        }
    }
    fprintf(g,"%d\n",nchei);
    fclose(g);
    return 0;
}