Cod sursa(job #2148943)

Utilizator EricEric Vilcu Eric Data 2 martie 2018 10:38:03
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.65 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("rj.in");
ofstream g("rj.out");
int R[102][102],J[102][102];
char x[102];
bool a[102][102];
int ri,rj,ji,jj,i,j,n,m;
int diri[]={0,0,-1,-1,-1,1,1,1},dirj[]={-1,1,-1,0,1,-1,0,1};
void lee(int i,int j,int b[102][102])
{
    struct{int i,j;}l[10002];
    int M=1,m=0,ii,jj;
    l[0].i=i;l[0].j=j;
    while(m<M)
    {
        i=l[m].i;j=l[m].j;
        for(int k=0;k<=7;++k)
        {
            ii=i+diri[k];jj=j+dirj[k];
            if(b[ii][jj]==0)if(a[ii][jj]==0)
            {
                l[M].i=ii;l[M].j=jj;
                b[ii][jj]=b[i][j]+1;++M;
            }
        }
        ++m;
    }
}
int main()
{
    f>>n>>m;
    f.getline(x+1,102);
    for(i=1;i<=n;++i)
    {
        f.getline(x+1,102);
        for(j=1;j<=m;++j)
        switch(x[j])
        {
            case 'X':a[i][j]=1;break;
            case ' ':a[i][j]=0;break;
            case 'R':ri=i;rj=j;a[i][j]=1;break;
            case 'J':ji=i;jj=j;a[i][j]=1;break;
        }
    }
    ++n;++m;x[0]=max(m,n);
    for(i=0;i<=x[0];++i){a[i][0]=a[0][i]=a[n][i]=a[i][m]=1;}
    --n;--m;
    //for(i=0;i<=n+1;++i){for(j=0;j<=m+1;++j)cout<<a[i][j]<<' ';cout<<'\n';}cout<<'\n';
    lee(ri,rj,R);
    //for(i=1;i<=n;++i){for(j=1;j<=m;++j)cout<<R[i][j]<<' ';cout<<'\n';}cout<<'\n';
    lee(ji,jj,J);
    //for(i=1;i<=n;++i){for(j=1;j<=m;++j)cout<<J[i][j]<<' ';cout<<'\n';}
    ri=2000000;
    for(i=1;i<=n;++i)for(j=1;j<=m;++j)if(R[i][j]>0)if(R[i][j]==J[i][j])if(R[i][j]<ri)
    {
        ri=R[i][j];
        ji=i;jj=j;
    }
    cout<<ri+1<<' '<<ji<<' '<<jj;
    g<<ri+1<<' '<<ji<<' '<<jj;
}