Cod sursa(job #1518498)

Utilizator gavrisraulRaul Gavris gavrisraul Data 5 noiembrie 2015 22:16:50
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.07 kb
#include <fstream>
#include<queue>
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");
int n,m,i,j,romeo[105][105],julieta[105][105],finalx,finaly,minim;
char Map[105];
const int Ox[]={0,0,1,1,1,-1,-1,-1};
const int Oy[]={1,-1,0,-1,1,-1,0,1};
pair<int,int> startr,startj,now,next;
queue<pair<int,int> > coada;
bool verif(pair<int,int> z)
{
    if(z. first>0 && z. first<=n &&z.second>0 && z.second<=m)
        return 1;
    return 0;
}
void lee(pair<int,int> start,int Mapp[105][105])
{
    coada.push(start);
    Mapp[start. first][start.second]=1;
    while(!coada.empty())
    {
        now=coada.front();
        for(i=0;i<8;i++)
        {
            next. first=now.first+Ox[i];
            next.second=now.second+Oy[i];
            if(Mapp[next. first][next.second]==0 && verif(next)==1)
            {
                Mapp[next. first][next.second]= Mapp[now. first][now.second]+1;
                coada.push(next);
            }
        }
        coada.pop();
    }
}
int main()
{
       fin>>n>>m;
       for(i=1;i<=n;i++)
       {
              fin.get();
              fin.get(Map,105);
              for(j=1;j<=m;j++)
              {
                     if(Map[j-1]=='X')
                     romeo[i][j]=julieta[i][j]=-1;
                     if(Map[j-1]=='R')
                     {
                            romeo[i][j]=1;
                            startr=make_pair(i,j);
                     }
                     if(Map[j-1]=='J')
                     {
                            julieta[i][j]=1;
                            startj=make_pair(i,j);
                     }
              }
       }
       lee(startr,romeo);
       lee(startj,julieta);
       minim=1000000;
       for(i=1;i<=n;i++)
       for(j=1;j<=m;j++)
              if(romeo[i][j]==julieta[i][j] && romeo[i][j]>0 && minim>romeo[i][j])
              {
                     minim=romeo[i][j];
                     finalx=i;
                     finaly=j;
              }
       fout<<minim<<" "<<finalx<<" "<<finaly;
       return 0;
}