Cod sursa(job #1656955)

Utilizator razvanlgu31Razvan Lungu razvanlgu31 Data 19 martie 2016 23:48:00
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.37 kb
#include <fstream>
#include <cstring>
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");
int a[120][120],b[120][120],i,j,n,m,ir,p,jr,ij,jj,u,x,ver,Min,imin,jmin;
char v[110],c;
int dil[9]={0,1,0,-1,0,1,1,-1,-1};
int dic[9]={0,0,1,0,-1,1,-1,1,-1};
struct elem
{
    int l,c;
}co[10010],de;
int main()
{
    fin>>n>>m;
    fin.getline(v,110);
    for(i=1;i<=n;i++)
    {
        fin.getline(v,110);
        for(j=0;j<strlen(v);j++)
        {
        c=v[j];
        if(c=='X')
            a[i][j+1]=-1;
            else
                a[i][j+1]=0;
            if(c=='R')
            {
                ir=i;
                jr=j+1;
            }
            if(c=='J')
            {
                ij=i;
                jj=j+1;
            }
        }

    }
    for(i=0;i<=m+1;i++)
    {
        a[0][i]=-1;
        a[n+1][i]=-1;
    }
    for(i=0;i<=n+1;i++)
    {
        a[i][0]=-1;
        a[i][m+1]=-1;
    }
    a[ir][jr]=1;
    p=0;
    u=1;
    co[1].l=ir;
    co[1].c=jr;
    ver=0;
    while(p<=u && ver!=1)
    {
        p++;
        for(i=1;i<=8;i++)
        {
            de.l=dil[i]+co[p].l;
            de.c=dic[i]+co[p].c;

            if(a[de.l][de.c]==0)
            {

                a[de.l][de.c]=a[co[p].l][co[p].c]+1;
                u++;
                co[u]=de;
                if(de.l==ij && de.c==jj)
                {
                    ver=1;
                    break;
                }
            }
        }
    }

    b[ij][jj]=1;
    p=0;
    u=1;
    co[1].l=ij;
    co[1].c=jj;
    ver=0;
    while(p<=u && ver!=1)
    {
        p++;
        for(i=1;i<=8;i++)
        {
            de.l=dil[i]+co[p].l;
            de.c=dic[i]+co[p].c;

            if(b[de.l][de.c]==0 && a[de.l][de.c]!=-1)
            {

                b[de.l][de.c]=b[co[p].l][co[p].c]+1;
                u++;
                co[u]=de;
                if(de.l==ir && de.c==jr)
                {
                    ver=1;
                    break;
                }
            }
        }
    }
    Min=2000000000;
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=m;j++)
        if(a[i][j]==b[i][j])
        if(Min>a[i][j] && a[i][j]>0)
        {
            Min=a[i][j];
            imin=i;
            jmin=j;
        }
    }
    fout<<Min<<" "<<imin<<" "<<jmin;
    return 0;
}