Cod sursa(job #1805433)

Utilizator LeVladzCiuperceanu Vlad LeVladz Data 13 noiembrie 2016 19:55:28
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.99 kb
#include <fstream>
#include <cstring>
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");
int n,m,i,j,i1,j1,i2,j2,ic,jc,iv,jv,minim,d,p,u,poz1,poz2;
int a[105][105],b[105][105],c[3][11025];
int di[]={-1,-1,-1,0,0,1,1,1};
int dj[]={-1,0,1,-1,1,-1,0,1};
char x[101];
int main ()
{
    fin>>n>>m;
    for(i=0;i<=n;i++)
    {
        fin.getline(x,101);
        for(j=0;j<strlen(x);j++)
        {
            if(x[j]=='R')
            {
                i1=i;
                j1=j+1;
            }
            if(x[j]=='J')
            {
                i2=i;
                j2=j+1;
            }
            if(x[j]=='X')
            {
                a[i][j+1]=-1;
                b[i][j+1]=-1;
            }
        }
    }
    c[0][1]=i1;
    c[1][1]=j1;
    a[i1][j1]=1;
    p=1;u=1;
    while(p<=u)
    {
        ic=c[0][p];
        jc=c[1][p];
        for(d=0;d<=7;d++)
        {
            iv=ic+di[d];
            jv=jc+dj[d];
            if(iv>=1&&iv<=n&&jv>=1&&jv<=m&&a[iv][jv]==0)
            {
                u++;
                c[0][u]=iv;
                c[1][u]=jv;
                a[iv][jv]=1+a[ic][jc];
            }
        }
        p++;
    }
    c[0][1]=i2;
    c[1][1]=j2;
    p=1;u=1;
    b[i2][j2]=1;
    minim=2000000000;
    while(p<=u)
    {
        ic=c[0][p];
        jc=c[1][p];
        for(d=0;d<=7;d++)
        {
            iv=ic+di[d];
            jv=jc+dj[d];
            if(iv>=1&&iv<=n&&jv>=1&&jv<=m&&b[iv][jv]==0)
            {
                u++;
                c[0][u]=iv;
                c[1][u]=jv;
                b[iv][jv]=1+b[ic][jc];
            }
        }
        p++;
    }
    for(i=1;i<=n;i++)
        for(j=1;j<=m;j++)
            if(a[i][j]==b[i][j]&&a[i][j]>0)
                if(a[i][j]<minim)
                {
                    minim=a[i][j];
                    poz1=i;
                    poz2=j;
                }
    fout<<minim<<" "<<poz1<<" "<<poz2;
    return 0;
}