Cod sursa(job #2304962)

Utilizator BaraianTudorBaraian Tudor Stefan BaraianTudor Data 18 decembrie 2018 21:27:33
Problema Rj Scor 0
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 2.27 kb
#include <iostream>
#include <fstream>
#include <queue>
#include <cstring>
using namespace std;
ifstream in("rj.in");
ofstream out("rj.out");
int n, m,tmin=100000;
int dx[8]={-1,-1,-1,0,1,1,1,0};
int dy[8]={-1,0,1,1,1,0,-1,-1};
char a[101][101],c[101];
int b[101][101],x , y, x1, y1, xt, yt, t[101][101];
bool mk[101][101];
queue <pair<int,int> > q;
queue <int> q1;
bool verif(int x,int y)
{
    if(x>0 && x<=n && y>0 && y<=m)return 1;
    return 0;
}
int main()
{
    in>>n>>m;
    in.getline(c,101);
    for(int i=1;i<=n;i++)
    {
        in.getline(a[i]+1,100);
    }
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            if(a[i][j]=='J' || a[i][j]=='R')
            q.push(make_pair(i,j)),mk[i][j]=1;
            if(a[i][j]=='J')q1.push(1);
            if(a[i][j]=='R')q1.push(2);
            if(a[i][j]=='X')mk[i][j]=1;
        }
    }
    while(!q.empty())
    {
        x=q.front().first;
        y=q.front().second;
        for(int i=0;i<=7;i++)
        {
            x1=x+dx[i];
            y1=y+dy[i];
            if(b[x1][y1]!=0 && t[x1][y1]!= q1.front() && b[x1][y1]!=-1)
            {
                if(tmin>q1.front())
                {
                    tmin=q1.front();
                    xt=x1;
                    yt=y1;
                }
                else if(tmin==q1.front())
                {
                    if(x1<=xt)
                    {
                        if(y1<yt)
                        {
                            tmin=q1.front();
                            xt=x1;
                            yt=y1;
                        }
                    }
                    else
                    {
                        tmin=q1.front();
                        xt=x1;
                        yt=y1;
                    }
                }
                b[x1][y1]=-1;
            }
            else if(verif(x1,y1) && b[x1][y1]!=-1  && mk[x1][y1]==0)
            {
                    q.push(make_pair(x1,y1));q1.push(q1.front());
                    b[x1][y1]=b[x][y]+1;
                    mk[x1][y1]=1;
                    t[x1][y1]=q1.front();
            }
        }
        q.pop();q1.pop();
    }
    out<<tmin+2<<' '<<xt<<' '<<yt;
    return 0;
}