Cod sursa(job #865240)

Utilizator raulmuresanRaul Muresan raulmuresan Data 26 ianuarie 2013 11:46:19
Problema Castel Scor 40
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.54 kb
#include <cstdio>

using namespace std;

struct printesa
{
    int x,y;
} c[30650];


short int a[177][177],b[250][250],v[225000],vizit[250][250],ok;

int n,m,i,j,x1,x2,y1,y2,dr,st,k,p,x,y,gasit,t;


void castel( int k)
{
    int lin,col;
    lin=c[k].x;
    col=c[k].y;
   // printf("%d,%d -\n",lin,col);
    //sus
    if (lin-1>=1 && v[a[lin-1][col]]==1 && vizit[lin-1][col]==0)
    {
        //printf("%d,%d -\n",lin,col);
        vizit[lin-1][col]=-1;
        v[b[lin-1][col]]=1;
        gasit++;
        dr++;
        c[dr].x=lin-1;
        c[dr].y=col;
        ok=1;
    }
    //dreapta
    if(col+1 <=m && v[a[lin][col+1]]==1 && vizit[lin][col+1]==0)
    {
       // printf("%d,%d -\n",lin,col);
        vizit[lin][col+1]=-1;
        v[b[lin][col+1]]=1;
        gasit++;
        dr++;
        c[dr].x=lin;
        c[dr].y=col+1;
        ok=1;
    }
    //jos
    if (lin+1<=n && v[a[lin+1][col]]==1 && vizit[lin+1][col]==0)
    {
        //printf("%d,%d -\n",lin,col);
        vizit[lin+1][col]=-1;
        v[b[lin+1][col]]=1;
        gasit++;
        dr++;
        c[dr].x=lin+1;
        c[dr].y=col;
        ok=1;
    }

    //stanga
    if(col-1 >=1 && v[a[lin][col-1]]==1 && vizit[lin][col-1]==0)
    {
        //printf("%d,%d -\n",lin,col);
        vizit[lin][col+1]=-1;
        v[b[lin][col+1]]=1;
        gasit++;
        dr++;
        c[dr].x=lin;
        c[dr].y=col-1;
        ok=1;
    }
}



int main()
{
    freopen ("castel.in","r",stdin);
    freopen ("castel.out","w",stdout);
    scanf("%d ",&n);
    scanf("%d ",&m);
    scanf("%d ",&k);
   // x=k/m+1;
   // y=k%m;
   // printf("%d %d\n",x,y);
    for(i=1;i<=n;i++){
        for(j=1;j<=m;j++){
            scanf("%d ",&a[i][j]);
        }
    }
    p=0;
    for(i=1;i<=n;i++){
        for(j=1;j<=m;j++){
            p++;
            b[i][j]=p;
            if(p==k)
            {
                x1=i;
                y1=j;
            }
        }
    }


    c[1].x=x1;
    c[1].y=y1;
    vizit[x1][y1]=-1;
    ok=1;
    dr=1;
    v[b[x1][y1]]=1;
   // gasit=1;

    while(ok==1)
    {
        ok=0;
        for(i=1;i<=dr;i++)
            castel(i);
    }


    for(i=1;i<=n;i++){
        for(j=1;j<=m;j++){
            if(vizit[i][j]==-1)
            t++;
           // printf("%d ",vizit[i][j]);
        }
      //  printf("\n");
    }
    for(i=1;i<=12;i++)
    {

       // printf("%d\n",v[i]);
    }
printf("%d",t);
    //printf("%d %d\n",x1,y1);
   //printf("%d ",b[x1][y1]);
}