Pagini recente » Cod sursa (job #2726943) | Cod sursa (job #1753163) | Cod sursa (job #2920068) | Cod sursa (job #972514) | Cod sursa (job #254508)
Cod sursa(job #254508)
#include<stdio.h>
#include<memory.h>
#define NMAX 10
int A[NMAX][NMAX];
int D[NMAX][NMAX];
int C1[NMAX*NMAX+2];
int C2[NMAX*NMAX+2];
int N,M,K;
int x1,x2,y1,y2;
const int dx[]={0,0,-1,1};
const int dy[]={-1,1,0,0};
void bf_1()
{
int inc=1,sf=0;
C1[ ++sf ]=x1;
C2[ sf ]=y1;
D[ x1 ][ y1 ]=0;
int a1,a2,a3,a4,i;
int ANS=N*M+1;
while( inc<=sf )
{
a1=C1[inc];
a2=C2[inc++];
if( a1==x2 && a2==y2 ) continue;
for( i=0; i<4; ++i )
{
a3=a1+dx[i];
a4=a2+dy[i];
if( a3>N || a4>M || a3<1 || a4<1 ) continue;
if( !A[a3][a4] ) continue;
if( D[a3][a4]==-1 || D[a3][a4]>D[a1][a2]+1 )
{
D[a3][a4]=D[a1][a2]+1;
C1[ ++sf ]=a3;
C2[ sf ]=a4;
}
}
}
printf("%d\n",D[ x2 ][ y2 ]);
}
int main()
{
freopen("kdrum.in","r",stdin);
freopen("kdrum.out","w",stdout);
scanf("%d%d%d\n",&N,&M,&K);
scanf("%d%d%d%d\n",&x1,&y1,&x2,&y2);
int i,j;
for(i=1; i<=N; ++i)
for(j=1; j<=M; ++j)
scanf("%d",&A[i][j]);
memset( D, 0xff, sizeof( D ));
if( K==1 )//bf penal
bf_1();
else
bf_1();//:)) deh
return 0;
}