Pagini recente » Cod sursa (job #506918) | Cod sursa (job #3040930) | Cod sursa (job #2151126) | Cod sursa (job #2141552) | Cod sursa (job #143953)
Cod sursa(job #143953)
/*
Autor: Mihai Tabara
Punctaj: 100 puncte
Lang: C++
Prog: Alee
*/
#include <stdio.h>
#define in "alee.in"
#define out "alee.out"
#define NMAX 176
#define INF NMAX*NMAX + 5
const int di[] = { 0, 1, 0, -1 };
const int dj[] = { 1, 0, -1, 0 };
char a[NMAX][NMAX];
int b[NMAX][NMAX];
int c[NMAX*NMAX][2];
int m, n, prim, ultim;
int ip, jp, is, js, iv, jv;
int Ok( int, int );
void Dinamic();
int main()
{
freopen ( in, "r", stdin );
freopen ( out, "w", stdout );
scanf( "%d%d", &n, &m );
int k;
int pozi, pozj;
for ( k = 1; k <= m; ++k )
{
scanf( "%d%d", &pozi, &pozj );
a[pozi][pozj] = 1;
}
scanf( "%d%d%d%d", &ip, &jp, &is, &js );
Dinamic();
printf( "%d\n", b[is][js] );
}
void Dinamic()
{
int i, j, d;
for ( i = 1; i <= n; ++i )
for ( j = 1; j <= n; ++j )
b[i][j] = INF;
b[ip][jp] = 1;
prim = ultim = 1;
c[prim][0] = ip;
c[prim][1] = jp;
while ( prim <= ultim )
{
i = c[prim][0];
j = c[prim][1];
for ( d = 0; d < 4; ++d )
{
iv = i + di[d];
jv = j + dj[d];
if ( Ok(iv,jv) )
{
if ( b[iv][jv] > b[i][j] + 1 )
{
b[iv][jv] = b[i][j] + 1;
ultim++;
c[ultim][0] = iv;
c[ultim][1] = jv;
}
}
}
prim++;
}
}
int Ok( int i, int j )
{
if ( i < 1 || i > n || j < 1 || j > n ) return 0;
if ( a[i][j] == 1 ) return 0;
return 1;
}