Cod sursa(job #2424495)

Utilizator darisavuSavu Daria darisavu Data 23 mai 2019 09:29:28
Problema Rj Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.79 kb
#include <fstream>
#include <queue>
using namespace std;
ifstream f("rj.in");
ofstream g("rj.out");
int ro[105][105],ju[105][105],n,m,p[105][105],r1,r2,j1,j2,mn=100000005,xmn,ymn;
int dx[]={-1,-1,0,1,1,1,0,-1};
int dy[]={0,1,1,1,0,-1,-1,-1};
char c;
queue< pair<int,int> > q;
void leero(int x, int y)
{
    int st,dr,k;
    while(!q.empty()) q.pop();
    q.push({x,y});
    ro[x][y]=1;
    while(!q.empty())
    {
        st=q.front().first;
        dr=q.front().second;
        for(k=0;k<8;k++)
        {
            if(ro[st+dx[k]][dr+dy[k]]==0) {ro[st+dx[k]][dr+dy[k]]=ro[st][dr]+1;q.push({st+dx[k],dr+dy[k]});}
        }
        q.pop();
    }
}
void leeju(int x,int y)
{
    int st,dr,k;
    while(!q.empty()) q.pop();
    q.push({x,y});
    ju[x][y]=1;
    while(!q.empty())
    {
        st=q.front().first;
        dr=q.front().second;
        for(k=0;k<8;k++)
        {
            if(ju[st+dx[k]][dr+dy[k]]==0) {ju[st+dx[k]][dr+dy[k]]=ju[st][dr]+1;q.push({st+dx[k],dr+dy[k]});}
        }
        q.pop();
    }
}
int main()
{
    int i,j;
    f>>n>>m;
    f.get();
    for(i=1;i<=n;i++)
        {
            for(j=1;j<=m;j++)
    {
        f.get(c);
        if(c=='X') p[i][j]=ro[i][j]=ju[i][j]=-1;
        else if(c==' ') p[i][j]=ro[i][j]=ju[i][j]=0;
        else if(c=='R') {r1=i;r2=j;}
        else if(c=='J') {j1=i;j2=j;}
    }
    f.get();
}
    for(i=0;i<=n+1;i++) p[i][0]=p[i][m+1]=ro[i][0]=ro[i][m+1]=ju[i][0]=ju[i][m+1]=-1;
    for(j=0;j<=m+1;j++) p[0][j]=p[n+1][j]=ro[0][j]=ro[n+1][j]=ju[0][j]=ju[n+1][j]=-1;
    leero(r1,r2);
    leeju(j1,j2);
    for(i=1;i<=n;i++)
        for(j=1;j<=m;j++)
    {
        if(ro[i][j]==ju[i][j]&&ro[i][j]<mn&&ro[i][j]>0) {mn=ro[i][j]; xmn=i;ymn=j;}
    }
    g<<mn<<" "<<xmn<<" "<<ymn;
    return 0;
}