Cod sursa(job #2194969)

Utilizator tavi2105Octavian Ungureanu tavi2105 Data 14 aprilie 2018 19:48:12
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.28 kb
#include <fstream>
using namespace std;
ifstream f("rj.in");
ofstream g("rj.out");
#define Nmax 200
#define infinit 1000000
const int dx[]={-1,-1,0,1,1,1,0,-1};
const int dy[]={0,1,1,1,0,-1,-1,-1};
void citire(int n, int R[Nmax][Nmax], int J[Nmax][Nmax], int &xr, int &yr, int &xj, int &yj)
{
    char s[Nmax];
    int i, j, m;
    f.getline(s,101,'\n');
    for(i=1;i<=n;i++)
    {
        f.getline(s,101,'\n');
        for(j=0;j<n;j++)
        {
            if(s[j]==' ')
            {
                R[i][j+1]=0;
                J[i][j+1]=0;
            }
            else
                if(s[j]=='R')
            {
                xr=i;
                yr=j+1;
            }
            else
                if(s[j]=='J')
            {
                xj=i;
                yj=j+1;
            }
            else
                if(s[j]=='X')
            {
                R[i][j+1]=1;
                J[i][j+1]=1;
            }
        }
    }
}
bool bune(int a, int b, int n)
{
    if(a<=0 or a>n or b<=0 or b>n)
        return false;

    return true;
}
void lee(int n, int a[Nmax][Nmax], int xi, int yi)
{
    int cx[Nmax*Nmax], cy[Nmax*Nmax], k, ii, jj, pi, ps;
    cx[0]=xi;
    cy[0]=yi;
    a[xi][yi]=1;
    pi=0;
    ps=0;
    while(pi<=ps)
    {
        for(k=0;k<8;k++)
        {
            ii=cx[pi]+dx[k];
            jj=cy[pi]+dy[k];
            if(bune(ii,jj,n))
            if(a[ii][jj]==0)
            {
                a[ii][jj]=a[cx[pi]][cy[pi]]+1;
                ps++;
                cx[ps]=ii;
                cy[ps]=jj;
            }
        }
        pi++;
    }
}
int main()
{
    int n, R[Nmax][Nmax], J[Nmax][Nmax], xr, yr, xj, yj, i, j, maximus, ii, jj;
    f>>n;
    citire(n,R,J,xr,yr,xj,yj);
    if(xr==yr and xj==yj)
        g<<xr<<" "<<yr<<" "<<1;
    else
    {
            lee(n,R,xr,yr);
            lee(n,J,xj,yj);
            maximus=infinit;
        for(i=0;i<n;i++)
            for(j=0;j<n;j++)
        {
            if(R[i][j]==J[i][j] && R[i][j]>1)
                if(R[i][j]<maximus)
                {
                    maximus=R[i][j];
                    ii=i;
                    jj=j;
                }
        }
        g<<maximus<<" "<<ii<<" "<<jj;
    }
    return 0;
}