Cod sursa(job #1786194)

Utilizator anisca22Ana Baltaretu anisca22 Data 22 octombrie 2016 15:55:35
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.17 kb
#include <iostream>
#include <fstream>
#include <queue>
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");
int n,m,mat[110][110],mat2[110][110],d,ii,jj,mn=10001;
int dx[]={-1,-1,-1,0,1,1,1,0};
int dy[]={-1,0,1,1,1,0,-1,-1};
string s;
queue <pair<int,int> > r,ju;
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;
            r.push(make_pair(ii,jj));
        }
    }
}
void parcj(int i,int j)
{
    for(d=0;d<=7;d++)
    {
        ii=i+dx[d];
        jj=j+dy[d];
        if(interior(ii,jj) && (mat2[ii][jj]>mat2[i][j]+1 || mat2[ii][jj]==0))
        {
            mat2[ii][jj]=mat2[i][j]+1;
            ju.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]==mat2[i][j] && mat[i][j]>0 &&mat[i][j]<mn)
            {
                mn=mat[i][j];
                ii=i;
                jj=j;
            }
        }
    fout<<mat[ii][jj]<<" "<<ii<<" "<<jj<<"\n";
}
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;
                    r.push(make_pair(i,j+1));
                    }
                if(s[j]=='X')
                    {
                    mat[i][j+1]=-1;
                    mat2[i][j+1]=-1;
                    }
                if(s[j]=='J')
                {
                    mat2[i][j+1]=1;
                    ju.push(make_pair(i,j+1));
                }
            }
        }
    while(!r.empty())
    {
        parc(r.front().first,r.front().second);
        r.pop();
    }
    while(!ju.empty())
    {
        parcj(ju.front().first,ju.front().second);
        ju.pop();
    }
    rezultat();
    return 0;
}