Cod sursa(job #2147772)

Utilizator Anastasia11Susciuc Anastasia Anastasia11 Data 28 februarie 2018 23:14:49
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.72 kb
#include <fstream>
#include <queue>
#define N 102
using namespace std;

ifstream f("rj.in");
ofstream g("rj.out");

int n,m,matr[N][N],matj[N][N];
int dx[]={-1,-1,0,1,1,1,0,-1},dy[]={0,1,1,1,0,-1,-1,-1};
int min1=N*N;
char strg[N];
int xi,yi,xf,yf,c1,c2;
char x;

void Lee(int mat[N][N],int xi,int yi){
    int ii,jj;
    queue <pair <int, int > > Q;
    mat[xi][yi]=1;
    Q.push(make_pair(xi,yi));
    while(!Q.empty())
    {
        for(int k=0;k<8;k++)
        {
            ii=Q.front().first+dx[k];
            jj=Q.front().second+dy[k];
            if(!(ii>=1&&ii<=n&&jj>=1&&jj<=m))
            continue;
            if(mat[ii][jj]==0)
            {
                mat[ii][jj]=mat[Q.front().first][Q.front().second]+1;
               Q.push(make_pair(ii,jj));
            }
        }
        Q.pop();
    }
}
int main()
{
 f >> n >> m ;
    f.get();
    for ( int i=1;i<=n;i++)
    {
     f.getline( strg , N ) ;
        for ( int j = 0  ; j < m ; j ++ )
        {
            if ( strg[j] == 'X' )
                matr[i][j+1]=matj[i][j+1]=-1;
            else
             if(strg[j] == 'R')
             {
                xi=i;
                yi=j+1;
            }
            else
             if(strg[j]=='J')
             {
                xf=i;
                yf=j+1;
            }
        }
    }

    Lee(matr,xi,yi);
    Lee(matj,xf,yf);
    for ( int i = 1 ; i <= n ; i ++ )
        for ( int j = 1 ; j <= m ; j ++ )
            if ( matr[i][j] == matj[i][j] && matr[i][j] > 0 && matr[i][j] < min1 )
            {
                min1=matr[i][j];
                c1=i;
                c2=j;
            }
    g << min1 << " " << c1 << " " << c2 ;

    return 0;
}