Pagini recente » Cod sursa (job #56913) | Cod sursa (job #379660) | Cod sursa (job #1063807) | Cod sursa (job #2230197) | Cod sursa (job #136211)
Cod sursa(job #136211)
#include <stdio.h>
#define NMMAX 160
int n,m,k;
int v[NMMAX][NMMAX];
int w[NMMAX*NMMAX];
int u[NMMAX*NMMAX],q;
int lst[NMMAX][NMMAX];
int dx[4]={0,1,0,-1};
int dy[4]={1,0,-1,0};
int main()
{
FILE *in = fopen("castel.in","r");
FILE *out = fopen("castel.out","w");
int i,j,a,x,y,s=0;
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]--;
lst[v[i][j]][++lst[v[i][j]][0]]=i*m+j;
}
for (i=0; i<4; i++)
dx[i]*=m;
k--; w[k]=-2; u[0]=k; q=1;
for (i=0; i<q; i++)
{
a=u[i];
for (j=1; j<=lst[a][0]; j++)
{
if(w[lst[a][j]]==0)
{
w[lst[a][j]]=-3;
}
if(w[lst[a][j]]==-1)
{
w[lst[a][j]]=-2;
u[q++]=lst[a][j];
}
}
for (j=0; j<4; j++)
if (a+dx[j]+dy[j]>=0 && a+dx[j]+dy[j]<n*m)
{
if (w[a+dx[j]+dy[j]]==0)
{
w[a+dx[j]+dy[j]]=-1;
}
if (w[a+dx[j]+dy[j]]==-3)
{
w[a+dx[j]+dy[j]]=-2;
u[q++]=a+dx[j]+dy[j];
}
}
}
fprintf(out,"%d\n",q);
fclose(in);
fclose(out);
return 0;
}