Cod sursa(job #2207993)

Utilizator alcholistuStafie Ciprian Mihai alcholistu Data 27 mai 2018 19:31:59
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.85 kb
#include <fstream>
#include <queue>
using namespace std;

int cs[8] = {-1, 1, 0, 0, 1, 1, -1, -1};
int cd[8] = {0, 0, 1, -1, -1, 1, -1, 1};
char rj[102][102];
int n, m;
void Lee(pair<int, int> r, int d[][101])
{
    queue < pair <int, int> > C;
    pair<int, int> t;
    C.push(r);
    d[r.first][r.second]=1;
    int i;
    while(!C.empty())
    {
        t=C.front();
        for(i=0;i<=7;i++)
                if(d[t.first+cs[i]][t.second+cd[i]]==0 && rj[t.first+cs[i]][t.second+cd[i]]!='X' && (t.first+cs[i]>=1 && t.first+cs[i]<=n) &&(t.second+cd[i]>=1 && t.second+cd[i]<=m))
        {
            d[t.first+cs[i]][t.second+cd[i]]=d[t.first][t.second]+1;
            C.push(pair<int,int>(t.first+cs[i],t.second+cd[i]));
        }
        C.pop();
    }
}

int main()
{
    int i,k;
    pair <int, int> r,j;
    ifstream fin("rj.in");
    ofstream out("rj.out");
    fin >> n >> m;
    fin.get();
    for (i=1; i<=n; i++)
    {
        for(k=1; k<=m; k++)
        {
            fin.get(rj[i][k]);
            if (rj[i][k]=='R')
            {
                r.first=i;
                r.second=k;
                rj[i][k]=' ';
            }
            if (rj[i][k]=='J')
            {
                j.first=i;
                j.second=k;
                rj[i][k]=' ';
            }
        }
        fin.get();
    }
    int ro[101][101], jul[101][101];
    for (i=1;i<=n;i++)
        for (k=1;k<=m;k++)
    {
        ro[i][k]=0;
        jul[i][k]=0;
    }
    Lee(r, ro);
    Lee(j, jul);
    int tmin=101;
    for (i=1;i<=n;i++)
        for(k=1;k<=m;k++)
            if (ro[k][i]==jul[k][i] && ro[k][i]<tmin && ro[k][i]!=0)
            {
                r.first=k;
                r.second=i;
                tmin=ro[k][i];
            }
    out<< tmin << " " << r.first << " " << r.second;
    return 0;
}