Pagini recente » Cod sursa (job #3239413) | Cod sursa (job #2139753) | Cod sursa (job #1779555) | Cod sursa (job #2438742) | Cod sursa (job #298256)
Cod sursa(job #298256)
#include<stdio.h>
typedef struct el{int x,y;};
typedef struct v{int nr,cheie;};
FILE *f,*g;
int i,m,n,j,p,u,sem[3600],k,q,t,max=0;
el c[3600];
v cam[60][60];
int main()
{
f=fopen("castel.in","r");
fscanf(f,"%d %d%d",&m,&n,&k);
for(i=1;i<=m;i++)
for(j=1;j<=n;j++){ fscanf(f,"%d",&cam[i][j].cheie); cam[i][j].nr=0;}
fclose(f);
for(i=1;i<=n*m;i++) sem[i]=0;
p=1;
u=1;
if(k%n==0){c[1].x=k/n;
c[1].y=n;}
else { c[1].x=k/n+1;
c[1].y=k%n;}
sem[k]=1;
while(p<=u)
{ if(c[p].x!=1){ if(c[p].y!=n) q=(c[p].x-2)*n+c[p].y;
else q=(c[p].x-1)*n;
if(sem[cam[c[p].x-1][c[p].y].cheie]==1){u++;
c[u].x=c[p].x-1;
c[u].y=c[p].y;
if(cam[c[u].x][c[u].y].nr==0){
cam[c[u].x][c[u].y].nr=cam[c[p].x][c[p].y].nr+1;
if(cam[c[u].x][c[u].y].nr>max)
max=cam[c[u].x][c[u].y].nr;
for(t=1;t<p;t++){
if(c[t].x!=1)
if(cam[c[t].x-1][c[t].y].nr==q){u++;
c[u].x=c[t].x-1;
c[u].y=c[t].y;
cam[c[u].x][c[u].y].nr=max+1;
max++; }
if(c[t].y!=n)
if(cam[c[t].x][c[t].y+1].nr==q){u++;
c[u].x=c[t].x;
c[u].y=c[t].y+1;
cam[c[u].x][c[u].y].nr=max+1;
max++; }
if(c[t].x!=m)
if(cam[c[t].x+1][c[t].y].nr==q){u++;
c[u].x=c[t].x+1;
c[u].y=c[t].y;
cam[c[u].x][c[u].y].nr=max+1;
max++; }
if(c[t].y!=1)
if(cam[c[t].x][c[t].y-1].nr==q){u++;
c[u].x=c[t].x;
c[u].y=c[t].y-1;
cam[c[u].x][c[u].y].nr=max+1;
max++; }
} }
sem[q]=1;
}}
if(c[p].y!=n){ if(c[p].y+1!=n) q=(c[p].x-1)*n+c[p].y+1;
else q=c[p].x*n;
if(sem[cam[c[p].x][c[p].y+1].cheie]==1){u++;
c[u].x=c[p].x;
c[u].y=c[p].y+1;
if(cam[c[u].x][c[u].y].nr==0){
cam[c[u].x][c[u].y].nr=cam[c[p].x][c[p].y].nr+1;
if(cam[c[u].x][c[u].y].nr>max)
max=cam[c[u].x][c[u].y].nr;
for(t=1;t<p;t++){
if(c[t].x!=1)
if(cam[c[t].x-1][c[t].y].nr==q){u++;
c[u].x=c[t].x-1;
c[u].y=c[t].y;
cam[c[u].x][c[u].y].nr=max+1;
max++; }
if(c[t].y!=n)
if(cam[c[t].x][c[t].y+1].nr==q){u++;
c[u].x=c[t].x;
c[u].y=c[t].y+1;
cam[c[u].x][c[u].y].nr=max+1;
max++; }
if(c[t].x!=m)
if(cam[c[t].x+1][c[t].y].nr==q){u++;
c[u].x=c[t].x+1;
c[u].y=c[t].y;
cam[c[u].x][c[u].y].nr=max+1;
max++; }
if(c[t].y!=1)
if(cam[c[t].x][c[t].y-1].nr==q){u++;
c[u].x=c[t].x;
c[u].y=c[t].y-1;
cam[c[u].x][c[u].y].nr=max+1;
max++; }
} }
sem[q]=1;
}}
if(c[p].x!=m){ if(c[p].y!=n) q=(c[p].x)*n+c[p].y;
else q=(c[p].x+1)*n;
if(sem[cam[c[p].x+1][c[p].y].cheie]==1){u++;
c[u].x=c[p].x+1;
c[u].y=c[p].y;
if(cam[c[u].x][c[u].y].nr==0){
cam[c[u].x][c[u].y].nr=cam[c[p].x][c[p].y].nr+1;
if(cam[c[u].x][c[u].y].nr>max)
max=cam[c[u].x][c[u].y].nr;
for(t=1;t<p;t++){
if(c[t].x!=1)
if(cam[c[t].x-1][c[t].y].nr==q){u++;
c[u].x=c[t].x-1;
c[u].y=c[t].y;
cam[c[u].x][c[u].y].nr=max+1;
max++; }
if(c[t].y!=n)
if(cam[c[t].x][c[t].y+1].nr==q){u++;
c[u].x=c[t].x;
c[u].y=c[t].y+1;
cam[c[u].x][c[u].y].nr=max+1;
max++; }
if(c[t].x!=m)
if(cam[c[t].x+1][c[t].y].nr==q){u++;
c[u].x=c[t].x+1;
c[u].y=c[t].y;
cam[c[u].x][c[u].y].nr=max+1;
max++; }
if(c[t].y!=1)
if(cam[c[t].x][c[t].y-1].nr==q){u++;
c[u].x=c[t].x;
c[u].y=c[t].y-1;
cam[c[u].x][c[u].y].nr=max+1;
max++; }
} }
sem[q]=1;
}}
if(c[p].y!=1){ if(c[p].y!=n) q=(c[p].x-1)*n+c[p].y-1;
else q=c[p].x*n;
if(sem[cam[c[p].x][c[p].y-1].cheie]==1){u++;
c[u].x=c[p].x;
c[u].y=c[p].y-1;
if(cam[c[u].x][c[u].y].nr==0){
cam[c[u].x][c[u].y].nr=cam[c[p].x][c[p].y].nr+1;
if(cam[c[u].x][c[u].y].nr>max)
max=cam[c[u].x][c[u].y].nr;
for(t=1;t<p;t++){
if(c[t].x!=1)
if(cam[c[t].x-1][c[t].y].nr==q){u++;
c[u].x=c[t].x-1;
c[u].y=c[t].y;
cam[c[u].x][c[u].y].nr=max+1;
max++; }
if(c[t].y!=n)
if(cam[c[t].x][c[t].y+1].nr==q){u++;
c[u].x=c[t].x;
c[u].y=c[t].y+1;
cam[c[u].x][c[u].y].nr=max+1;
max++; }
if(c[t].x!=m)
if(cam[c[t].x+1][c[t].y].nr==q){u++;
c[u].x=c[t].x+1;
c[u].y=c[t].y;
cam[c[u].x][c[u].y].nr=max+1;
max++; }
if(c[t].y!=1)
if(cam[c[t].x][c[t].y-1].nr==q){u++;
c[u].x=c[t].x;
c[u].y=c[t].y-1;
cam[c[u].x][c[u].y].nr=max+1;
max++; }
} }
sem[q]=1;
}}
p++; }
g=fopen("castel.out","w");
fprintf(g,"%d\n",max);
fclose(g);
return 0;}