Cod sursa(job #1319605)

Utilizator robertkarolRobert Szarvas robertkarol Data 17 ianuarie 2015 10:58:15
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.23 kb
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");
struct Element
{
    int l,c;
    unsigned d;
};
Element c[100*100+1],x,y;
char ch[101];
int n,m,i,j,inc,sf,a[102][102],b[102][102],dl[]={-1,-1,0,1,1,1,0,-1},dc[]={0,1,1,1,0,-1,-1,-1},xr,yr,xj,yj,h,lin,col,nr,Min;
int main()
{
    fin>>n>>m;
    fin.get();
    for(i=1;i<=n;i++)
           {

              fin.getline(ch,101);
             // cout<<ch<<"\n";
              for(j=0;j<m;j++)
               {
                   if(ch[j]=='X')
                   a[i][j+1]=-1;
                 else if(ch[j]=='R')
                    a[i][j+1]=-3;//romeo
                 else if(ch[j]=='J')
                    a[i][j+1]=-4;//jilieta
             if(a[i][j]==0)
                    a[i][j]=-2;
            if(a[i][j]==-3)
                xr=i,yr=j;
            else if(a[i][j]==-4)
                xj=i,yj=j;
            b[i][j]=a[i][j];
               }
           }
     for(i=0;i<=n;i++) a[i][0]=a[i][m+1]=-1;
     for(i=0;i<=m+1;i++) a[0][i]=a[n+1][i]=-1;
     x.l=xr; x.c=yr; x.d=1; c[inc]=x; a[xr][yr]=1;
    while(inc<=sf)
    {
        x=c[inc++];
        for(i=0;i<8;i++)
        {
            y.l=x.l+dl[i];
            y.c=x.c+dc[i];
            if(a[y.l][y.c]==-2)
            {

                y.d=x.d+1;
                a[y.l][y.c]=y.d;
                c[++sf]=y;
            }
        }
    }
    inc=sf=0;
    x.l=xj; x.c=yj; x.d=1; c[inc]=x; a[xj][yj]=1;
    while(inc<=sf)
    {
        x=c[inc++];
        for(i=0;i<8;i++)
        {
            y.l=x.l+dl[i];
            y.c=x.c+dc[i];
            if(b[y.l][y.c]==-2)
            {

                y.d=x.d+1;
                b[y.l][y.c]=y.d;
                c[++sf]=y;
                if(a[y.l][y.c]==b[y.l][y.c])
                    if(nr==0)
                {
                    Min=b[y.l][y.c];
                    lin=y.l,col=y.c,nr=b[y.l][y.c];
                }
                else if(b[y.l][y.c]<Min)
                {
                    Min=b[y.l][y.c];
                    lin=y.l,col=y.c,nr=b[y.l][y.c];
                }
            }
        }
    }
    fout<<nr<<" "<<lin<<" "<<col;

    return 0;
}