Pagini recente » Cod sursa (job #1100805) | Cod sursa (job #2476055) | Cod sursa (job #1027187) | Cod sursa (job #3295205) | Cod sursa (job #2202385)
#include <iostream>
#include <fstream>
using namespace std;
ifstream in("rj.in");
ofstream out("rj.out");
const short int N = 102;
const short int dlin[] = { 0, 0, 1,-1, -1, 1, 1,-1};
const short int dcol[] = {-1, 1, 0, 0, -1, 1,-1, 1};
struct poz
{
int lin,col;
};
poz q[N*N];
char a[N][N];
int n, m, d[N][N];
void lee ( poz x )
{
poz y;
int i, u, p, f;
p = 0;
u = -1;
d[x.lin][x.col] = 0;
q[++u] = x;
while( p <= u )
{
x = q[p++];
for ( i = 0; i < 8; i++ )
{
y.lin = x.lin + dlin[i];
y.col = x.col + dcol[i];
if ( ( a[y.lin][y.col] == ' ' || a[y.lin][y.col] == 'J' )&& d[y.lin][y.col] == 0 )
{
d[y.lin][y.col] = 1 + d[x.lin][x.col];
q[++u] = y;
}
if ( ( a[y.lin][y.col] == ' ' || a[y.lin][y.col] == 'J' )&& d[y.lin][y.col] != 0 )
{
if ( d[y.lin][y.col] > 1 + d[x.lin][x.col] )
{
d[y.lin][y.col] = 1 + d[x.lin][x.col];
q[++u] = y;
}
}
}
}
}
int main()
{
register int i;
register int j;
poz r, ju;
char c;
in >> n >> m;
for ( i = 0; i <= n + 1; i++ )
{
d[i][0] = -1;
d[0][i] = -1;
}
for ( i = 0; i <= m + 1; i++ )
{
d[i][0] = -1;
d[0][i] = -1;
}
in.get();
for ( i = 1; i <= n; i++ )
{
for ( j = 1; j <= m; j++ )
{
c = in.get();
if ( c == '\n' )
{
while( j <= m )
{
a[i][j] = ' ';
j++;
}
}
else a[i][j] = c;
if ( a[i][j] == 'R' )
{
r.lin = i;
r.col = j;
}
if ( a[i][j] == 'J' )
{
ju.lin = i;
ju.col = j;
}
}
if ( c != '\n' )
in.get();
}
for ( i = 1; i <= n; i++ )
{
for ( j = 1; j <= m; j++ )
cout << a[i][j]<<' ';
cout <<'\n';
}
lee(r);
for ( i = 1; i <= n; i++ )
{
for ( j = 1; j <= m; j++ )
cout << d[i][j]<<' ';
cout <<'\n';
}
int tmp = d[ju.lin][ju.col]-1;
out << tmp << ' ';
poz x, y;
x.lin = ju.lin;
x.col = ju.col;
for ( i = 1; i < tmp; i++ )
{
for ( j = 0; j < 8; j++ )
{
y.lin = x.lin - dlin[j];
y.col = x.col - dcol[j];
if ( d[y.lin][y.col] == d[x.lin][x.col] - 1 )
{
x.lin = y.lin;
x.col = y.col;
}
}
}
out << x.lin <<' '<<x.col;
return 0;
}