Cod sursa(job #1786158)

Utilizator anisca22Ana Baltaretu anisca22 Data 22 octombrie 2016 15:16:48
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.54 kb
#include <iostream>
#include <fstream>
#include <queue>
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");
int n,m,mat[110][110],fij,fii,d,ii,jj;
int dx[]={1,0,-1,0,1,1,-1,-1};
int dy[]={0,1,0,-1,1,-1,1,-1};
string s;
queue <pair<int,int> > q;
int interior(int i,int j)
{
    if(i>=1 && i<=n && j>=1 && j<=m && mat[i][j]!=-1)
        return 1;
    return 0;
}
void parc(int i,int j)
{
    for(d=0;d<=7;d++)
    {
        ii=i+dx[d];
        jj=j+dy[d];
        if(interior(ii,jj) && (mat[ii][jj]>mat[i][j]+1 || mat[ii][jj]==0))
        {
            mat[ii][jj]=mat[i][j]+1;
            q.push(make_pair(ii,jj));
        }
    }
}
void rezultat()
{
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
        {
        if(mat[i][j]==mat[fii][fij]/2+1)
            {
            fout<<mat[i][j]<<" "<<i<<" "<<j<<"\n";
            return;
            }
        }
}
int main()
{
    fin>>n>>m;
    getline(fin,s);
    for(int i=1;i<=n;i++)
        {
            getline(fin,s);
            for(int j=0;j<m;j++)
            {
                if(s[j]=='R')
                    {mat[i][j+1]=1;
                        q.push(make_pair(i,j+1));}
                if(s[j]=='X')
                    mat[i][j+1]=-1;
                if(s[j]=='J')
                {
                    fii=i;
                    fij=j+1;
                }
            }
        }
    while(!q.empty())
    {
        parc(q.front().first,q.front().second);
        q.pop();
    }
    rezultat();
    return 0;
}