Pagini recente » Cod sursa (job #1888054) | Cod sursa (job #1904039) | Cod sursa (job #1141331) | Istoria paginii utilizator/ucv_mocioaca_popa_calina | Cod sursa (job #135843)
Cod sursa(job #135843)
#include <stdio.h>
int n,m,k;
int v[155][155];
int vtf[155][155];
int key[22505];
int v1[22505],k1;
int v2[22505],k2;
void wtf(int a)
{
int x=a/m,y=a%m;
if (x-1>-1)
if (vtf[x-1][y]>-2)
if (key[v[x-1][y]])
{
vtf[x-1][y]=-2;
v1[k1++]=(x-1)*m+y;
key[(x-1)*m+y]=1;
}
else
{
vtf[x-1][y]=-1;
v2[k2++]=(x-1)*m+y;
}
if (x+1<n)
if (vtf[x+1][y]>-2)
if (key[v[x+1][y]])
{
vtf[x+1][y]=-2;
v1[k1++]=(x+1)*m+y;
key[(x+1)*m+y]=1;
}
else
{
vtf[x+1][y]=-1;
v2[k2++]=(x+1)*m+y;
}
if (y-1>-1)
if (vtf[x][y-1]>-2)
if (key[v[x][y-1]])
{
vtf[x][y-1]=-2;
v1[k1++]=x*m+y-1;
key[x*m+y-1]=1;
}
else
{
vtf[x][y-1]=-1;
v2[k2++]=x*m+y-1;
}
if (y+1<m)
if (vtf[x][y+1]>-2)
if (key[v[x][y+1]])
{
vtf[x][y+1]=-2;
v1[k1++]=x*m+y+1;
key[x*m+y+1]=1;
}
else
{
vtf[x][y+1]=-1;
v2[k2++]=x*m+y+1;
}
}
int main()
{
FILE *in = fopen("castel.in","r");
FILE *out = fopen("castel.out","w");
int i,j;
fscanf(in,"%d%d%d",&n,&m,&k);
for (i=0; i<n; i++)
for (j=0; j<m; j++)
{
fscanf(in,"%d",&v[i][j]);
v[i][j]--;
}
k--;
key[k]=1; v1[0]=k; k1=1; k2=0; i=0; j=0;
vtf[k/m][k%m]=-2;
while (i<k1 || j<k2)
{
if (i<k1)
{
wtf(v1[i]);
i++;
}
else
{
if (key[ v[v2[j]/m][v2[j]%m] ])
{
v1[k1++]=v2[j];
vtf[v2[j]/m][v2[j]%m]=-2;
}
j++;
}
}
int s=0;
for (i=0; i<n; i++)
for (j=0; j<m; j++)
if (vtf[i][j]==-2)
s++;
fprintf(out,"%d\n",s);
fclose(in);
fclose(out);
return 0;
}