Cod sursa(job #81878)

Utilizator coderninuHasna Robert coderninu Data 4 septembrie 2007 21:01:39
Problema Castel Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.36 kb
#include <stdio.h>
#define infile "castel.in"
#define outfile "castel.out"
#define nmax 151

int v[nmax][nmax], n, m, j, k, cx[nmax*nmax], cy[nmax*nmax], dx[4]={-1,0,1,0}, dy[4]={0,1,0,-1};
short chei[nmax*nmax], c[nmax][nmax];
long u, i;

void readdata();
void solve();
void writedata();

int inside(int,int);
int new_k(int,int);

int main()
{
 readdata();
 solve();
 writedata();
 return 0;
}

void readdata()
{
 freopen(infile, "r", stdin);
 scanf("%d %d %d\n", &n, &m, &k);
 for (i=1; i<=n; i++)
     for (j=1; j<=m; j++)
	 scanf("%d ", &v[i][j]);
 fclose(stdin);
}

void writedata()
{
 freopen(outfile, "w", stdout);
 printf("%ld\n", u);
 fclose(stdout);
}

void solve()
{
 int u2=1, x, y;
 cx[1]=k/m;
 cy[1]=k%m;
 if (!cy[1]) cy[1]=m;
 else cx[1]++;
 chei[k]=1;
 c[cx[1]][cy[1]]=1;
 while (u2)
     {
      u+=u2;
      u2=0;
      for (i=1; i<=u; i++)
	  {
	   x=cx[i];
	   y=cy[i];
	   for (int l=0; l<4; l++)
	       if (inside(x+dx[l],y+dy[l]) && !c[x+dx[l]][y+dy[l]] && chei[v[x+dx[l]][y+dy[l]]])
		   {
		    u2++;
		    cx[u+u2]=x+dx[l];
		    cy[u+u2]=y+dy[l];
		    c[x+dx[l]][y+dy[l]]=1;
		    chei[new_k(x+dx[l],y+dy[l])]=1;
		   }
	  }
     }
}

int inside(int x, int y)
{
 if (x<1 || x>n) return 0;
 if (y<1 || y>m) return 0;
 return 1;
}

int new_k(int x, int y)
{
 return (x-1)*m+y;
}