Cod sursa(job #418714)

Utilizator AnteusPatrascoiu Mihai Anteus Data 16 martie 2010 12:01:39
Problema Castel Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.05 kb
#include <stdio.h>
FILE *f=fopen ("castel.in", "r");
FILE *g=fopen ("castel.out", "w");
int n,m,k,pi,pj,pr,ult=1,sw,camere;
int v[155][155];
int chei[155*155];
int d1[]={-1, 0, 1, 0};
int d2[]={0, 1, 0, -1};
struct coada { int x,y; } c[155*155], t;


void citire (void) {
int i,j,nr=0;
fscanf (f, "%d%d%d", &n, &m, &k);
chei[k]=1;
for (i=1;i<=n;i++)
	for (j=1;j<=m;j++)
	{
		fscanf (f, "%d", &v[i][j]);
		nr++;
		if (nr==k)
		{
			pi=i;
			pj=j;
		}
	}
}

int valid() {
	if ( !t.x || !t.y || t.x>n || t.y>m )
		return 0;
	if ( !chei[ v[t.x][t.y] ] || !v[t.x][t.y] )
		return 0;
return 1;
}

void Lee(int pi, int pj) {
int i,nr=k;
pr=1;
c[pr].x=pi;	c[pr].y=pj;

while (pr<=ult)
{
		for (i=0;i<4;i++)
		{
			t.x=c[pr].x+d1[i];
			t.y=c[pr].y+d2[i];
			if ( valid() )
			{
				ult++;
				c[ult]=t;
				nr = (t.x-1)*m+t.y;
				chei[nr]=1;
				v[t.x][t.y]=0;
				sw=1;
				camere++;
			}
		}
	pr++;
}
}
			

int main() {
citire();
do
{
	sw=0;
	Lee(pi, pj);
}
while (sw);

fprintf (g, "%d", camere);
return 0;
}