Cod sursa(job #2202385)

Utilizator cristinamateiCristina Matei cristinamatei Data 8 mai 2018 17:53:48
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.75 kb
#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;
}