Cod sursa(job #2417807)

Utilizator adimiclaus15Miclaus Adrian Stefan adimiclaus15 Data 1 mai 2019 15:16:19
Problema Rj Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.52 kb
#include <iostream>
#include <fstream>
#include <queue>
using namespace std;
ifstream f("rj.in");
ofstream g("rj.out");
int n,m,R[105][105],J[105][105],xr,yr,xj,yj,minim,p,q;
char s[105];
int dx[]={-1,1,0,0,-1,-1,1,1};
int dy[]={0,0,1,-1,-1,1,-1,1};
void bfs(int x,int y,int d[105][105])
{
    int i;
    queue < pair<int,int> > coada;
    coada.push({x,y});
    d[x][y]=1;
    while(!coada.empty())
    {
        x=coada.front().first;
        y=coada.front().second;
        coada.pop();
        for(i=0;i<8;i++)
        {
            if(d[x+dx[i]][y+dy[i]]>d[x][y]+1)
            {
                d[x+dx[i]][y+dy[i]]=d[x][y]+1;
                coada.push({x+dx[i],y+dy[i]});
            }
        }
    }
}
int main()
{
    int i,j;
    f>>n>>m;
    f.get();
    for(i=1;i<=n;i++)
    {
        f.get(s+1,105);
        for(j=1;j<=m;j++)
        {
            if(s[j]==' ')
            {
                R[i][j]=J[i][j]=n*m;
            }
            if(s[j]=='R')
            {
                xr=i;
                yr=j;
                R[i][j]=J[i][j]=n*m;
            }
            if(s[j]=='J')
            {
                xj=i;
                yj=j;
                R[i][j]=J[i][j]=n*m;
            }
        }
        f.get();
    }
    bfs(xr,yr,R);
    bfs(xj,yj,J);
    minim=n*m;
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=m;j++)
        {
            if(R[i][j]==J[i][j])
            {
                if(R[i][j]!=0)
                {
                    if(R[i][j]<minim)
                    {
                        minim=R[i][j];
                        p=i;
                        q=j;
                    }
                    else
                    {
                        if(R[i][j]==minim)
                        {
                            if(i<p)
                            {
                                p=i;
                                q=j;
                            }
                            else
                            {
                                if(i==p)
                                {
                                    if(j<q)
                                    {
                                        p=i;
                                        q=j;
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
    g<<minim<<" "<<p<<" "<<q;
    return 0;
}