Cod sursa(job #2208006)

Utilizator alcholistuStafie Ciprian Mihai alcholistu Data 27 mai 2018 20:31:10
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.86 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};
int rj[104][104];
int n, m;
void Lee(pair<int, int> r, int d[][104])
{
    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]]!=-1 && (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;
    char p[m+1];
    fin.get();
    for (i=1; i<=n; i++)
    {
        fin.getline(p,m+1);
        for(k=1; k<=m; k++)
        {
            if (p[k-1]=='R')
            {
                r.first=i;
                r.second=k;
            }
            else if (p[k-1]=='J')
            {
                j.first=i;
                j.second=k;
            }
            else if (p[k-1]=='X')
                rj[i][k]=-1;
        }
    }
    int ro[104][104], jul[104][104];
    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);
    r.second=102;
    int tmin=102;
    for (i=1;i<=n;i++)
        for(k=1;k<=m;k++)
            if (ro[i][k]==jul[i][k] && ro[i][k]<tmin && ro[i][k]!=0)
            {
                r.first=i;
                r.second=k;
                tmin=ro[i][k];
            }
    out<< tmin << " " << r.first << " " << r.second;
    return 0;
}