Pagini recente » Cod sursa (job #257557) | Cod sursa (job #1364876) | Cod sursa (job #2155374) | Cod sursa (job #524468) | Cod sursa (job #2049839)
#include <fstream>
#include <cstring>
#define NMAX 102
using namespace std;
ifstream f ("rj.in");
ofstream g ("rj.out");
struct elem
{
int x;
int y;
int pasi;
}qu[ NMAX * NMAX ], unu, doi;
int n, i, m, check, j, x1, y1, x2, y2, bJ[ NMAX ][ NMAX ], bR[ NMAX ][ NMAX ], aux, ans = 1 << 30;
char x, linie[ NMAX + 500 ];
int dx[] = { 0, 0, 1, -1, -1, 1, 1, -1};
int dy[] = { 1, -1, 0, 0, 1, -1, 1, -1};
void borduri()
{
for ( i = 0; i <= n + 1; i ++ )
bR[ i ][ 0 ] = bR[ i ][ m + 1 ] = bJ[ i ][ 0 ] = bJ[ i ][ m + 1 ] = -1;
for ( i = 0; i <= m + 1; i ++ )
bR[ 0 ][ i ] = bR[ n + 1 ][ i ] = bJ[ 0 ][ i ] = bJ[ n + 1 ][ i ] = -1;
}
void bfs( int x, int y, bool z )
{
int inc = 1, sf = 1;
qu[ inc ] . x = x;
qu[ inc ] . y = y;
qu[ inc ] . pasi = 1;
while ( sf >= inc )
{
unu = qu[ inc ++ ];
for (int k = 0; k <= 7; k ++ )
{
doi . x = unu . x + dx[ k ];
doi . y = unu . y + dy[ k ];
doi . pasi = unu . pasi + 1;
if ( !z && !bR[ doi . x ][ doi . y ] )
{
qu[ ++ sf ] = doi;
bR[ doi . x ][ doi . y ] = doi . pasi;
}
else if ( z && !bJ[ doi . x ][ doi . y ] )
{
qu[ ++ sf ] = doi;
bJ[ doi . x ][ doi . y ] = doi . pasi;
}
}
}
}
void citire()
{
f >> n >> m;
f . get ( x );
for ( i = 1; i <= n; i ++ )
{
for ( j = 0; j <= 100; j ++ )
linie [ j ] = 0;
f . getline ( linie, 105 );
aux = strlen( linie ) - 1;
for ( j = 0; j <= aux; j ++ )
{
x = linie [ j ];
if ( x == 'R' )
{
x1 = i;
y1 = j + 1;
bR[ i ][ j + 1 ] = 1;
}
if ( x == 'J' )
{
x2 = i;
y2 = j + 1;
bJ[ i ][ j + 1 ] = 1;
}
if ( x == 'X' )
bR[ i ][ j + 1 ] = bJ[ i ][ j + 1 ] = -1;
}
}
}
void rezolvare()
{
for ( i = 1; i <= n; i ++ )
for ( j = 1; j <= m; j ++ )
{
if ( bR[ i ][ j ] == bJ[ i ][ j ] && bR[ i ][ j ] > 0 && bR[ i ][ j ] < ans )
ans = bR[ i ][ j ];
}
for ( i = 1; i <= n; i ++ )
for ( j = 1; j <= m; j ++ )
{
if ( bR[ i ][ j ] == bJ[ i ][ j ] && bR[ i ][ j ] == ans )
{
g << ans << " " << i << " " << j;
return;
}
}
}
int main()
{
citire();
borduri();
bfs( x1, y1, 0 );
bfs( x2, y2, 1 );
/*for ( i = 1; i <= n; i ++ )
{
for ( j = 1; j <= m; j ++ )
g << bR[ i ][ j ] << " ";
g << "\n";
}
g << "\n";
for ( i = 1; i <= n; i ++ )
{
for ( j = 1; j <= m; j ++ )
g << bJ[ i ][ j ] << " ";
g << "\n";
}
*/
//g << bR[ 15 ][ 46 ] << " " << bJ[ 15 ][ 46 ];
rezolvare();
}