Cod sursa(job #1742432)

Utilizator tifui.alexandruTifui Ioan Alexandru tifui.alexandru Data 16 august 2016 14:09:54
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.06 kb
#include <iostream>
#include <fstream>
#include <queue>
using namespace std;
ifstream f("rj.in");
ofstream g("rj.out");
int R[101][101];
int J[101][101];
int dx[8]={-1,-1,-1,0,0,1,1,1};
int dy[8]={-1,0,1,-1,1,-1,0,1};
queue< pair <int,int> > coada;
int n,m,iu,ju;
bool valid(int i, int j)
{
    if(i<1 or j<1 or i>n or j>m) return false;
    if(R[i][j]==-1) return false;
    return true;
}
void Lee(int a[101][101],int x, int y)
{   int i,j;
    int k;
    a[x][y]=1;
    coada.push(make_pair(x,y));
    while(!coada.empty())
    {
        i=coada.front().first;
        j=coada.front().second;
        coada.pop();
        for(k=0;k<=7;k++)
        {
            iu=i+dx[k];
            ju=j+dy[k];
            if(valid(iu,ju) and a[iu][ju]<1)
            {
                a[iu][ju]=a[i][j]+1;
                coada.push(make_pair(iu,ju));
            }
        }
    }
}
int main()
{
int r1,r2,j1,j2,i,j;
char x;
f>>n>>m;
f>>noskipws>>x;
i=1;
j=1;
    while(f>>noskipws>>x)
    {
        if(x=='\n') {i++; j=1;}
        else{
        if(x=='R')
        {
            r1=i;
            r2=j;
        }
        if(x=='J')
        {
            j1=i;
            j2=j;
        }
        if(x=='X')
        {
            R[i][j]=-1;
            J[i][j]=-1;
        }
        j++;
        }
    }

Lee(R,r1,r2);
Lee(J,j1,j2);
int l,c,v;
l=n+1;
c=m+1;
v=n*m+1;
for(i=1;i<=n;i++)
    for(j=1;j<=m;j++)
    {
     if(R[i][j]==J[i][j] and R[i][j]+J[i][j]>0)
     {
         if(R[i][j]<v)
         {
             v=R[i][j];
             l=i;
             c=j;
         }
         else if(R[i][j]==v)
         {
             if(i<l)
             {
                 v=R[i][j];
                 l=i;
                 c=j;
             }
             else if(l==i)
             {
                 if(j<c)
                 {
                     v=R[i][j];
                     l=i;
                     c=j;
                 }
             }
         }
     }
    }
g<<v<<' '<<l<<' '<<c;

    return 0;
}