Pagini recente » Cod sursa (job #728703) | Cod sursa (job #972256) | Cod sursa (job #910389) | Cod sursa (job #2973423) | Cod sursa (job #418587)
Cod sursa(job #418587)
#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;
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]);
pi=k/n; pj=k%m;
if (!pi)
pi=1;
if (!pj)
pj=k;
}
int valid() {
if ( !t.x || !t.y || t.x>n || t.y>m )
return 0;
if ( v[t.x][t.y]<1 )
return 0;
return 1;
}
void Lee(int pi, int pj) {
int i,nr=k,nr2;
pr=1;
c[pr].x=pi; c[pr].y=pj;
while (pr<=ult)
{
if ( chei[nr] && v[c[pr].x][c[pr].y] )
{
sw=1;
v[c[pr].x][c[pr].y]=0;
nr2= (c[pr].x-1)*m+c[pr].y;
chei[nr2]=1;
camere++;
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;
v[t.x][t.y]*=-1;
}
}
}
pr++;
nr=v[c[pr].x][c[pr].y]*-1;
}
}
int main() {
citire();
do
{
sw=0;
Lee(pi, pj);
}
while (sw);
fprintf (g, "%d", camere);
return 0;
}