Cod sursa(job #1072860)

Utilizator AeroHHorea Stefan AeroH Data 5 ianuarie 2014 00:34:53
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.52 kb
#include <fstream>
#include <queue>
using namespace std;
int dx[8] = {-1, -1, -1, 0, 1, 1, 1, 0},dy[8] = {-1, 0, 1, 1, 1, 0, -1, -1};
int R[105][105], J[105][105], m, n, t = 2000000,i,j;
ifstream fin ("rj.in");
ofstream fout ("rj.out");
struct pt {int x, y;} sr, sj, meet;
queue <pt> Q;
pt init (int x, int y){pt a;a.x=x,a.y=y;return a;}
void Lee (int a[][105], pt s, pt f)
{
    Q.push(s);
    a[s.x][s.y] = 1;
    while (Q.size())
    {
        i = Q.front().x;
        j = Q.front().y;
        for (int k = 0; k < 8; k++)
        {
            int ii = i + dx[k];
            int jj = j + dy[k];
            if (ii>=0&&jj>=0&&ii<m&&jj<n&&!a[ii][jj])
            {
                a[ii][jj]=a[i][j]+1;
                Q.push(init(ii,jj));
            }
        }
        Q.pop();
    }
}
int main ()
{
    char v[105];
    fin >> m >> n;
    fin.get();
    for (i = 0; i < m; ++i)
    {
        fin.getline (v, 105);
        for (j = 0; j < n; ++j)
        {
            if (v[j]=='X')
                R[i][j]=J[i][j]=-1;
            if (v[j]=='R')
                sr.x=i,sr.y=j;
            if (v[j]=='J')
                sj.x=i,sj.y=j;
        }
    }
    Lee (R, sr, sj);
    Lee (J, sj, sr);
    for (i = 0; i < m; ++i)
        for (j = 0; j < n; ++j)
            if (R[i][j] == J[i][j] && R[i][j] > 0 && R[i][j] < t)
            {
                meet.x=i;
                meet.y=j;
                t=R[i][j];
            }
    fout<<t<<" "<<meet.x+1<<" "<<meet.y+1;
    return 0;
}