Cod sursa(job #128221)

Utilizator RobytzzaIonescu Robert Marius Robytzza Data 26 ianuarie 2008 17:56:48
Problema Castel Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.48 kb
#include <stdio.h>
//using namespace std;

int a[155][155],n,m,k,mat[155][155];
int x[155*155],y[155*155];
int sir[155*155];
long nr=1;

const int l[5]={-1,0,0,1};
const int c[5]={0,-1,1,0};

void citire ()
{
    freopen ("castel.in","r",stdin);
    scanf ("%d%d%d",&n,&m,&k);

    for (int i=1;i<=n;i++)
      for (int j=1;j<=m;j++)
	   scanf ("%d",&a[i][j]);
    fclose(stdin);
}

void umple ()
{
       long num=1;
     for (int ii=1;ii<=n;ii++)
	for (int jj=1;jj<=m;jj++)
             mat[ii][jj]=num++;

    for (int i=0;i<n+1;i++)
        {
            a[i][0]=-1;
            a[i][m+1]=-1;
        }

    for (int j=0;j<m+2;j++)
       {
           a[0][j]=-1;
           a[n+1][j]=-1;
       }

}

void parcurgere ()
{
    if (k%m==0)
    {
	x[0]=k/m;
	y[0]=m;
	sir[a[x[0]][y[0]]]=1;
	a[x[0]][y[0]]=-1;
    }
    else
    {
      x[0]=k/m+1;
      y[0]=k%m;
      sir[a[x[0]][y[0]]]=1;
      a[x[0]][y[0]]=-1;
    }
    int ok=1;
    while (ok){
    ok=0;
    for (int i=0;i<nr;i++)
	for (int k=0;k<4;k++)
	   if (a[x[i]+l[k]] [y[i] +c[k]]!=-1)
	      if (sir[a[x[i]+l[k]] [y[i]+c[k]]]==1)
	      {
		  x[nr]=x[i]+l[k];
		  y[nr]=y[i]+c[k];
		  sir[mat[x[nr]][y[nr]]]=1;
		  a[x[nr]][y[nr]]=-1;
		  nr++;
		  ok=1;
	      }
    }
}

int main ()
{
       citire ();
       umple();
       parcurgere();
       freopen ("castel.out","w",stdout);
       printf ("%d\n",nr);
       fclose (stdout);
       return 0;
}