Cod sursa(job #2127429)

Utilizator stefanbrb10Barbu Stefan stefanbrb10 Data 10 februarie 2018 17:34:04
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.72 kb
#include <fstream>
#include <queue>
#include <iostream>
#include <cstring>
using namespace std;
ifstream input("rj.in");
ofstream print("rj.out");
const int nrmax=102;
char s[nrmax];
int A[nrmax][nrmax];
int matLee1[nrmax][nrmax];
int matLee2[nrmax][nrmax];
int di[]={0,1,-1,0,1,-1,1,-1};
int dj[]={1,0,0,-1,1,-1,-1,1};
int i,j,n,m,x1,x2,y1,y2,ii,jj;
queue< pair<int,int> >coada;

void citire()
{
input>>n>>m;
for(i=1;i<=n;i++){
        input.get();
        input.get(s,101);
    for (j=1;j<=m;j++) {
        if (s[j-1]==' ') A[i][j]=0;
        if (s[j-1]=='X') A[i][j]=-1;
        if (s[j-1]=='R'){A[i][j]=1;
                         x1=i,y1=j;}
        if (s[j-1]=='J'){A[i][j]=1;
                         x2=i,y2=j;}
                        }
    }
}

bool valid (int x,int y)
{
if(x<1 || y<1 || x>n ||y>m)return false;
if(A[x][y]==-1)return false;
return true;
}

void Lee(int x1,int y1, int matLee[nrmax][nrmax])
{
matLee[x1][y1]=1;
coada.push(make_pair(x1,y1));
while(!coada.empty())
{
int x=coada.front().first;
int y=coada.front().second;
coada.pop();
for(int h=0;h<8;h++){
        int ox=di[h]+x;
        int oy=dj[h]+y;
if(valid(ox,oy)&&matLee[ox][oy]<1){
        matLee[ox][oy]=matLee[x][y]+1;
        coada.push(make_pair(ox,oy));
}
}
}
}

int main()
{citire();
Lee(x1,y1,matLee1);
Lee(x2,y2,matLee2);
int minim=(n*m)+2;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++){
        if(matLee1[i][j]==matLee2[i][j]&&matLee1[i][j]<minim&&matLee1[i][j]>0){minim=matLee1[i][j];
                                                                               ii=i;
                                                                               jj=j;}
}
print<<minim<<" "<<ii<<" "<<jj;

return 0;
}