Pagini recente » Cod sursa (job #2315400) | Cod sursa (job #668132) | Cod sursa (job #2658573) | Cod sursa (job #419884) | Cod sursa (job #254486)
Cod sursa(job #254486)
#include<stdio.h>
int n,m,k,x1,y1,x2,y2;
long a[52][52],b[52][52];
void read ()
{
FILE *f=fopen("kdrum.in","r");
fscanf(f,"%d%d%d",&n,&m,&k);
fscanf(f,"%d%d%d%d",&x1,&y1,&x2,&y2);
int i,j;
for (i=1;i<=n;++i)
for (j=1;j<=m;++j)
{
fscanf(f,"%ld",&a[i][j]);
if (a[i][j]==0)
b[i][j]=20000000;
}
fclose(f);
}
void solve ()
{
int i,j,poz=1;
b[x1][y1]=1;
for (i=y1+1;i<=y2 && a[x1][i]; i++)
b[x1][i]=++poz;
poz=1;
for (i=x1+1;i<=x2 && a[y1][i]; i++)
b[i][y1]=++poz;
for (i=x1+1;i<=x2;++i)
{
for (j=y1;j<=y2;++j)
if (!b[i][j])
{
long min=20000001;
if (b[i-1][j]<min&&i-1>=1)
min=b[i-1][j];
if (b[i][j-1]<min&&j-1>=1)
min=b[i][j-1];
if (!b[i-1][j] && !b[i][j-1])
b[i][j]=0;
else
b[i][j]=min+1;
}
}
if (!b[x2][y2])
for (i=x1;i<=x2;++i)
for (j=y1;j<=y2;++j)
if (!b[i][j])
{
int min=20000001;
if (b[i-1][j]<min&&i-1>=1)
min=b[i-1][j];
if (b[i][j-1]<min&&j-1>=1)
min=b[i][j-1];
if (b[i][j+1]<min&&j+1<=n)
min=b[i][j+1];
if (b[i+1][j]<min&&i+1<=n)
min=b[i+1][j];
b[i][j]=min+1;
}
}
void write ()
{
FILE *f=fopen("kdrum.out","w");
fprintf(f,"%ld",b[x2][y2]);
fclose(f);
}
int main ()
{
read ();
solve ();
write ();
return 0;
}