Cod sursa(job #2325804)

Utilizator iramIoana Popa iram Data 22 ianuarie 2019 22:24:21
Problema Rj Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.79 kb
#include <iostream>
#include <fstream>
#include <cstring>
#include <queue>
using namespace std;

ifstream f("RJ.in"); ofstream g("rj.out");

int ro[101][101],ju[101][101],dl[]= {-1,1,0,0-1,-1,1,1},dc[]= {0,0,-1,1,-1,1,-1,1},n,m,xr,yr,xj,yj;
queue < pair <int,int> >c;
void citire()
{
    char ch;
    int i,j;
    f>>n>>m;
    f.get(ch);
    for(i=1; i<=n; ++i)
    {
        for(j=1; j<=m; ++j)
        {
            f.get(ch);//cout<<ch;
            if(ch=='R')
            {
                xr=i;
                yr=j;
            }
            else if(ch=='J')
            {
                xj=i;
                yj=j;
            }
            else if(ch==' ') ro[i][j]=ju[i][j]=0;
            else ro[i][j]=ju[i][j]=-1;
        }
        f.get(); //cout<<endl;
    }
}
bool ok(int a,int b)
{
    if(a<1 || b<1 || a>n || b>m) return false;
    return true;
}
void lee(int x,int y,int a[101][101])
{
    int i,j,k,iu,ju;
    while(!c.empty()) c.pop();
    a[x][y]=1;
    c.push(make_pair(x,y));
    while(!c.empty())
    {
        i=c.front().first;
        j=c.front().second;
        c.pop();
        for(k=0; k<8; ++k)
        {
            iu=i+dl[k];
            ju=j+dc[k];
            if(a[iu][ju]==0 && ok(iu,ju)==true)
            {
                a[iu][ju]=a[i][j]+1;
                c.push(make_pair(iu,ju));
            }
        }
    }
}
int main()
{
    int i,j,tmin,xmin,ymin;
    citire();
    lee(xr,yr,ro);
    lee(xj,yj,ju);
    tmin=101*101;

    for(i=1; i<=n; ++i)
    {
        for(j=1; j<=m; ++j)
        {
            if(ro[i][j]==ju[i][j] && ro[i][j]<tmin && ro[i][j]>0)
            {
                tmin=ro[i][j];
                xmin=i;  ymin=j;
            }
        }
    }

    g<<tmin<<" "<<xmin<<" "<<ymin;
}