Cod sursa(job #1231792)

Utilizator HedwigAdina Stefania Hedwig Data 21 septembrie 2014 16:17:05
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.88 kb
#include<fstream>
#include<cstring>
#include<climits>

using namespace std;
ifstream f("rj.in");
ofstream g("rj.out");

int m,n,r[101][101],jj[101][101],tmin=INT_MAX,dx[]={0,-1,-1,0,1,1,1,0,-1},dy[]={0,0,1,1,1,0,-1,-1,-1};
struct punct
{
    int x,y;
};
punct x1,x2,pf;

void lee(int mat[101][101],int xi,int yi)
{
    int coada[101][3],p,u,i,l,c;
    coada[0][0]=xi;
    coada[0][1]=yi;
    coada[0][2]=1;
    mat[xi][yi]=1;
    p=0;
    u=0;
    while(p<=u)
    {
        l=coada[p][0];
        c=coada[p][1];
        for(i=1;i<=8;i++)
        {
            l+=dx[i];
            c+=dy[i];
            if(mat[l][c]==0 && l>=1 && l<=n && c>=1 && c<=m)
            {
                u++;
                coada[u][0]=l;
                coada[u][1]=c;
                coada[u][2]=coada[p][2]+1;
                mat[l][c]=coada[u][2];
            }
        }
        p++;
    }
}

void init()
{
    char s[101];
    int i,j;
    f>>n>>m;
    f.get();
    for(i=1;i<=n;i++)
    {
        f.getline(s,101);
        for(j=1;j<=m;j++)
        {
            if(s[j-1]=='X')
                {
                    r[i][j]=-1;
                    jj[i][j]=-1;
                }
            else
                if(s[j-1]=='R')
            {
                x1.x=i;
                x1.y=j;
            }
            else
                if(s[j-1]=='J')
            {
                x2.x=i;
                x2.y=j;
            }
        }
    }
}

void afis()
{
    int i,j;
    for(i=1;i<=n;i++)
        for(j=1;j<=m;j++)
            if(r[i][j]==jj[i][j] && r[i][j]<tmin && r[i][j]!=-1 && r[i][j])
            {
                tmin=r[i][j];
                pf.x=i;
                pf.y=j;
            }
    g<<tmin<<'\n'<<pf.x<<'\n'<<pf.y;
}

int main()
{
    init();
    lee(r,x1.x,x1.y);
    lee(jj,x2.x,x2.y);
    afis();
    return 0;
}