Cod sursa(job #1629766)

Utilizator TudorMTudor Moldovanu TudorM Data 4 martie 2016 18:21:52
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.37 kb
#include <iostream>
#include <fstream>
#include <queue>
#include <string.h>
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");
int dx[]={0,0,1,1,1,-1,-1,-1};
int dy[]={1,-1,0,1,-1,0,1,-1};
int ro[100][100],ju[100][100],n,m,rx,ry,jx,jy,minx,miny,dmax=100;
queue < pair <int, int> > coada;
string s;
void citire()
{   int i;unsigned int j;
    fin>>n>>m;
    fin.get();
    for(i=1; i<=n; i++)
    { getline(fin,s);
      for(j=0; j<s.size(); j++)
    {    if(s[j]==' ')ro[i][j+1]=ju[i][j+1]=0;
         else if(s[j]=='X')ro[i][j+1]=ju[i][j+1]=-1;
         else if(s[j]=='R'){ rx=i;
                             ry=j+1;
                        }
         else if(s[j]=='J'){ jx=i;
                             jy=j+1;
                        }
     }
    }
}
bool ok(int i,int j,int a[100][100])
{
    return a[i][j]==0 && i>=1 && j>=1 && i<=n && j<=m;
}
void lee(int x, int y,int a[100][100])
{
    int i,j,i_urm,j_urm;
    a[x][y]=1;
    coada.push(make_pair(x,y));
    while(!coada.empty())
    {
        i=coada.front().first;
        j=coada.front().second;
        coada.pop();
        for(int d=0; d<8; d++) { i_urm=i+dx[d];
                                 j_urm=j+dy[d];
                                 if(ok(i_urm,j_urm,a)){ a[i_urm][j_urm]=1+a[i][j];
                                                                           coada.push(make_pair(i_urm,j_urm));
                                                                         }
                               }
    }
}
int main()
{
    citire();
    lee(rx,ry,ro);
    lee(jx,jy,ju);
    for(int i=1; i<=n; i++)
    for(int j=1; j<=n; j++)if(ro[i][j]==ju[i][j] && ro[i][j]>0){if(ro[i][j]<dmax){ minx=i;
                                                                                   miny=j;
                                                                                 }
                                                                 else if(ro[i][j]==dmax){ if(i<minx)minx=i;
                                                                                          else if(i==minx)if(j<miny)miny=j;
                                                                                        }
                                                               }
    fout<<ro[minx][miny]<<" "<<minx<<" "<<miny;

    fin.close();
    fout.close();
    return 0;
}