Cod sursa(job #1845427)

Utilizator alesalexandru chirila ales Data 11 ianuarie 2017 14:39:46
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.8 kb
#include <iostream>
#include <fstream>
#include <cstring>
#include <queue>
using namespace std;
queue <pair<int,int> > c;
char ch;
int ro[102][102],ju[102][102],xr,yr,xj,yj,dl[]= {0,0,-1,1,-1,1,-1,1},dc[]= {-1,1,0,0,1,1,-1,-1},dir,n,m;
ifstream f("rj.in");
ofstream g("rj.out");

void citire()
{
    f>>n>>m;
    int i,j;
    f.get();
    for(i=1; i<=n; ++i)
        {for(j=1; j<=m; ++j)
        {
            f.get(ch);
            if(ch=='R')
            {
                xr=i;
                yr=j;
            }
            else if(ch=='J')
            {
                xj=i;
                yj=j;
            }
            else if(ch=='X') ro[i][j]=ju[i][j]=-1;
        }
    f.get();
        }
}
bool ok(int i,int j)
{
    if(i<1||i>n||j<1||j>m) return false;
    return true;
}
void lee(int b[102][102],int x,int y)
{
    int i_urm,j_urm,i,j;
    memset(b,0,sizeof(b));
    while(!c.empty()) c.pop();
    c.push(make_pair(x,y));
    b[x][y]=1;
    while(!c.empty())
    {
        i=c.front().first;
        j=c.front().second;
        c.pop();
        for(dir=0; dir<8; ++dir)
        {
            i_urm=i+dl[dir];
            j_urm=j+dc[dir];
            if(ok(i_urm,j_urm)&&b[i_urm][j_urm]==0)
            {
                c.push(make_pair(i_urm,j_urm));
                b[i_urm][j_urm]=b[i][j]+1;
            }
        }
    }
}
void drum_minim()
{
    int i,j,tmin=101*101,xmin,ymin;
    xmin=ymin=1;
    for(i=1; i<=n; ++i)
        for(j=1; j<=m; ++j)
            if(ro[i][j]==ju[i][j]&&ro[i][j]>0&&ro[i][j]<tmin)
            {
                tmin=ro[i][j];
                xmin=i;
                ymin=j;
            }
    g<<tmin<<" "<<xmin<<" "<<ymin;
}
int main()
{
    citire();
    lee(ro,xr,yr);
    lee(ju,xj,yj);
    drum_minim();
}