Cod sursa(job #1122460)
Utilizator | Data | 25 februarie 2014 18:16:11 | |
---|---|---|---|
Problema | Castel | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 2.38 kb |
#include <cstdio>
using namespace std;
FILE *f=fopen("castel.in","r");
FILE *g=fopen("castel.out","w");
int n,m,k,v[152][152],chei[151*151],d[152][152],lin[50000],col[50000];
int main()
{int i,j,l,c,p,u,uu;bool ok;
fscanf(f,"%d %d %d",&n,&m,&k);
for (i=1;i<=n;i++) for (j=1;j<=m;j++) fscanf(f,"%d",&v[i][j]);
chei[k]=1;
l=k/m;
c=k%m;
if (c==0) c=m;
else l++;
d[l][c]=1;
p=1;u=1;uu=1;
lin[1]=l;col[1]=c;
do
{ok=false;
p=1;
while (p<=u) {
for (i=p;i<=u;i++) {l=lin[i];c=col[i];
if (d[l-1][c]==0&&chei[v[l-1][c]]==1) {d[l-1][c]=1;
chei[(l-2)*m+c]=1;
uu++;
lin[uu]=l-1;col[uu]=c;ok=true;
}
if (d[l+1][c]==0&&chei[v[l+1][c]]==1) {d[l+1][c]=1;
chei[l*m+c]=1;
uu++;
lin[uu]=l+1;col[uu]=c;ok=true;
}
if (d[l][c-1]==0&&chei[v[l][c-1]]==1) {d[l][c-1]=1;
chei[(l-1)*m+c-1]=1;
uu++;
lin[uu]=l;col[uu]=c-1;ok=true;
}
if (d[l][c+1]==0&&chei[v[l][c+1]]==1) {d[l][c+1]=1;
chei[(l-1)*m+c+1]=1;
uu++;
lin[uu]=l;col[uu]=c+1;ok=true;
}
}
p=u+1;
u=uu;
}
}while (ok==true);
fprintf(g,"%d",u);
return 0;
}