Cod sursa(job #2044713)

Utilizator YouDontNeedMyNameJurcut Paul YouDontNeedMyName Data 21 octombrie 2017 12:35:16
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.86 kb
#include <fstream>
#define MAX 110
using namespace std;
ifstream cin("rj.in");
ofstream cout("rj.out");
struct coada
{
    int x,y;
};
int a[MAX][MAX],R[MAX][MAX],m,n,xr,yr,xj,yj;
int dx[8]={-1,-1,0,1,1,1,0,-1},dy[8]={0,1,1,1,0,-1,-1,-1};
void citire()
{
    char s[MAX];
    int i,j;
    cin >> n >> m;
    cin.get();
    for(i=1; i<=n; i++)
    {
        cin.get(s,MAX);
        cin.get();
        for(j=0; j<m; j++)
        {
            if(s[j]=='X')
                a[i][j+1]=-1;
            if(s[j]=='R')
                xr=i,yr=j+1;
            if(s[j]=='J')
                xj=i,yj=j+1;
        }
    }
    for(i=0; i<=n+1; i++)
        a[i][0]=a[i][m+1]=-1;
    for(j=0; j<=m+1; j++)
        a[0][j]=a[n+1][j]=-1;
}
void lee(int xs, int ys, int v[MAX][MAX])
{
    coada c[MAX*MAX],aux;
    int p=1,u=0,j,i,x,y;
    for(i=1; i<=n; i++)
        for(j=1; j<=m; j++)
            v[i][j]=0;
    u=1;
    c[u].x=xs;
    c[u].y=ys;
    v[xs][ys]=1;
    while(p<=u)
    {
        aux=c[p];
        p++;
        for(i=0; i<8; i++)
        {
            x=aux.x+dx[i];
            y=aux.y+dy[i];
            if(a[x][y]==0 && v[x][y]==0)
            {
                u++;
                c[u].x=x;
                c[u].y=y;
                v[x][y]=v[aux.x][aux.y]+1;
            }
        }
    }
}
void afis(int J[MAX][MAX])
{
    int i,j,tmin,x,y;
    tmin=MAX*MAX;
    for(i=1; i<=n; i++)
    {
        for(j=1; j<=m; j++)
        {
            if(R[i][j]!=0 && J[i][j]==R[i][j])
                if(R[i][j]<tmin)
                {
                    tmin=R[i][j];
                    x=i;
                    y=j;
                }
        }
    }
    cout << x << " " << y << " " << tmin;
}
int main()
{
    int J[MAX][MAX];
    citire();
    lee(xr,yr,R);
    lee(xj,yj,J);
    afis(J);
    return 0;
}