Cod sursa(job #1818547)

Utilizator deliabiancasuciuSuciu delia deliabiancasuciu Data 29 noiembrie 2016 13:43:22
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.05 kb
#include <iostream>
#include<fstream>
#include<cstring>
#define INF 32000
#define N 105
using namespace std;
ifstream in("rj.in");
ofstream out("rj.out");
struct ptlee
{
    short x,y;
}coada[N*N];
short ijulieta,jjulieta,iromeo,l,c,st,sf,jromeo,leer[N][N],leej[N][N],i,j,n,m,tmin=INF,imin,jmin,aux;
char h[N][N];
short dx[]={0,-1,1,0,0,1,1,-1,-1} , dy[]={0,0,0,-1,1,-1,1,-1,1};
void bordare()
{
    for(i=0;i<=n+1;i++)
        for(j=0;j<=m+1;j++)
            h[i][j] = '#';
    for(i=1;i<=n;i++)
        for(j=1;j<=m;j++)
            {leer[i][j]= INF; leej[i][j]=INF;}
}
void citire()
{
    in>>n>>m; in.get();
    bordare();
    for(i=1;i<=n;i++)
        {in.get(h[i]+1,m+1);in.get();}
        for(i=1;i<=n;i++)
            for(j=1;j<=m;j++)
        {if(h[i][j]=='R'){iromeo=i;jromeo=j;leer[i][j]=1;}
        if(h[i][j]=='J'){ijulieta=i;jjulieta=j;leej[i][j]=1;}}
}
void slee()
{
    coada[1].x=iromeo; coada[1].y=jromeo;
    st=1;sf=1;
    while(st<=sf)
    {
        l=coada[st].x;
        c=coada[st].y;
        st++;
        for(i=1;i<=8;i++)
        {
            if(h[l+dx[i]][c+dy[i]]==' '&&leer[l+dx[i]][c+dy[i]]>leer[l][c]+1)
            {
                leer[l+dx[i]][c+dy[i]]=leer[l][c]+1; sf++; coada[sf].x=l+dx[i]; coada[sf].y=c+dy[i];
            }
        }
    }
    for(i=1;i<=sf;i++){coada[i].x=0;coada[i].y=0;}
    coada[1].x=ijulieta; coada[1].y=jjulieta;
    st=1;sf=1;
    while(st<=sf)
    {
        l=coada[st].x;
        c=coada[st].y;
        st++;
        for(i=1;i<=8;i++)
        {
            if(h[l+dx[i]][c+dy[i]]==' '&&leej[l+dx[i]][c+dy[i]]>leej[l][c]+1)
            {
                leej[l+dx[i]][c+dy[i]]=leej[l][c]+1; sf++; coada[sf].x=l+dx[i]; coada[sf].y=c+dy[i];
            }
        }
    }
}
int main()
{
    citire();
    slee();
    for(i=1;i<=n;i++)
        for(j=1;j<=m;j++)
    {
        if(leer[i][j]==leej[i][j]&&leer[i][j]>1&&leej[i][j]>1)
        if(leej[i][j]<tmin) {tmin=leej[i][j];imin=i;jmin=j;}
    }
    out<<tmin<<" "<<imin<<" "<<jmin;
    return 0;
}