Pagini recente » Cod sursa (job #912024) | Cod sursa (job #2125287) | Cod sursa (job #45274) | Cod sursa (job #527198) | Cod sursa (job #46225)
Cod sursa(job #46225)
#include <iostream>
using namespace std;
const int MAX = 1001;
const int INTMAX = 127;
FILE *in = fopen("padure.in", "r"), *out = fopen("padure.out", "w");
short a[MAX][MAX];
short g[MAX][MAX];
char b[MAX][MAX];
int n, m, pl, pc, cl, cc;
int nn,mm;
void read()
{
fscanf(in,"%u",&n);
fscanf(in,"%u",&m);
fscanf(in,"%u",&pl);
fscanf(in,"%u",&pc);
fscanf(in,"%u",&cl);
fscanf(in,"%u",&cc);
for ( int i = 0; i < n; ++i )
for ( int j = 0; j < m; ++j )
fscanf(in,"%d",&a[i][j]);
for ( int i = 0; i < n; ++i )
for ( int j = 0; j < m; ++j )
b[i][j] = INTMAX;
}
struct coada
{
int x, y;
};
coada lee[1600000];
int dx[] = {0, 1, 0, -1};
int dy[] = {1, 0, -1, 0};
void grup()
{
for ( int i = 0; i < n; ++i )
for ( int j = 0; j < m; ++j )
g[i][j]=a[i][j];
nn=n;mm=m;
}
void sol()
{
int p = 0, u =0;
lee[p].x = pl-1;
lee[p].y = pc-1;
b[lee[p].x][lee[p].y] = 0;
while ( p <= u )
{
for ( int i = 0; i < 4; ++i )
{
int X = lee[p].x + dx[i];
int Y = lee[p].y + dy[i];
int D = b[lee[p].x][lee[p].y];
if ( X < n && Y < m && X >= 0 && Y >= 0
&& b[X][Y] > D )
{
if(lee[u].x != X ||lee[u].y != Y)
{
++u;
lee[u].x = X;
lee[u].y = Y;
//vis[X][Y] = 1;
//cout << lee[u].x << " " << lee[u].y << endl;
}
b[X][Y] = D;
//cout << p << " " << u << endl << endl;
if ( g[X][Y] != g[lee[p].x][lee[p].y] )
{
b[X][Y] = D+1;
//++u;
//lee[u].x = X;
//lee[u].y = Y;
}
}
}
++p;
}
//cout << (int)b[cl-1][cc-1] << endl;
fprintf(out,"%u",(int)b[cl-1][cc-1]);
}
int main()
{
read();
/*
grup();
*/
sol();
return 0;
}