Cod sursa(job #1877348)

Utilizator AndreeaAmzaAndreea Amza AndreeaAmza Data 13 februarie 2017 11:33:17
Problema Rj Scor 0
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");
struct mm
{
    short lin,col;
}p,c[101*101],fin,romeo,juli;
char s[101],x;
short ro[101][101],ju[101][101],v[101][101];
short n,m,i,j,nr,a,b,prim,ultim,mini=10001;
short dx[4]={0,0,1,-1};
short dy[4]={1,-1,0,0};
void lee(mm p,short v[101][101])
{
    prim=ultim=0;
    c[prim]=p;
    v[p.lin][p.col]=1;
    //cout<<p.lin<<" "<<p.col;
    while(prim<=ultim)
    {
        p=c[prim];
        prim++;
        for(i=0;i<=3;i++)
        {
           if(v[p.lin+dx[i]][p.col+dy[i]]==0) {v[p.lin+dx[i]][p.col+dy[i]]=v[p.lin][p.col]+1;
            ultim++;
            c[ultim].lin=p.lin+dx[i];
            c[ultim].col=p.col+dy[i];
           }
        }
    }
}
int main()
{
    f>>n>>m;
    f.get();
    for(i=1;i<=n;i++)
    {
        f.getline(s,101);
        for(j=0;j<m;j++)
        {
        //cout<<x<<'1'<<endl;
         if(s[j]=='X') ro[i][j+1]=ju[i][j+1]=-1;
         else if(s[j]==' ') ro[i][j+1]=ju[i][j+1]=0;
        else if(s[j]=='R') {romeo.lin=i;romeo.col=j+1;}
        else if(s[j]=='J') {juli.lin=i;juli.col=j+1;}
        //cout<<v[j]<<1<<endl;
        }
        //f.get();
    }
     for(i=0;i<=n+1;i++)
    {
        ro[i][0]=ju[i][0]=-1;
        ro[i][m+1]=ju[i][m+1]=-1;
    }
    for(i=0;i<=m+1;i++)
    {
        ro[0][i]=ju[0][i]=-1;
        ro[n+1][i]=ju[n+1][i]=-1;
    }
    lee(romeo,ro);
    lee(juli,ju);
    for(i=0;i<=n+1;i++)
    {
        for(j=0;j<=m+1;j++)
            if(ro[i][j]==ju[i][j] && ro[i][j]>0) if(ro[i][j]<mini) mini=ro[i][j];
    }
    g<<mini-1;
    return 0;
}