Cod sursa(job #1857815)

Utilizator doriiiiiii7Tirsogoiu Dorina doriiiiiii7 Data 26 ianuarie 2017 18:37:16
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.33 kb
#include <fstream>
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");
int n,m,x,y,R[105][105],J[105][105],p,u,x1,x2,y1,y2,i,j,a,b,Min; char S[105];
int dl[]={-1,1,0,0,-1,1,1,-1};
int dc[]={0,0,-1,1,1,1,-1,-1};
struct pozitie
{
    int c,l;
};
pozitie c[1000005];
void bordare ()
{
    for(int i=0;i<=n+1;i++)
        R[i][0]=R[i][m+1]=J[i][0]=J[i][m+1]=-1;
    for(int j=0;j<=m+1;j++)
        R[0][j]=R[n+1][j]=J[0][j]=J[n+1][j]=-1;
}
void leeR (int x, int y)
{
    int l1,c1,l2,c2;
    c[p].l=x;
    c[p].c=y;
    while(p<=u)
    {
        l1=c[p].l;
        c1=c[p].c;
        p++;
        for(int i=0;i<8;i++)
        {
            l2=l1+dl[i];
            c2=c1+dc[i];
            if(R[l2][c2]==0){
                R[l2][c2]=R[l1][c1]+1;
                u++;
                c[u].l=l2;
                c[u].c=c2;
            }
        }
    }

}
void leeJ (int x, int y)
{
    int l1,c1,l2,c2;
    p=u=1;
    c[p].l=x;
    c[p].c=y;
    while(p<=u)
    {
        l1=c[p].l;
        c1=c[p].c;
        p++;
        for(int i=0;i<8;i++)
        {
            l2=l1+dl[i];
            c2=c1+dc[i];
            if(J[l2][c2]==0){
                J[l2][c2]=J[l1][c1]+1;
                u++;
                c[u].l=l2;
                c[u].c=c2;
            }
        }
    }

}
void compar()
{
    Min=10000000;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            if(R[i][j]==J[i][j] && R[i][j]<Min && R[i][j]>0)
            {
                a=i; b=j;
                Min=R[i][j];
            }
        }
    }

}
void afis(int x[105][105])
{
        for(int i=1;i<=n;i++){
            for(int j=1;j<=m;j++){
                fout<<x[i][j]<< " ";
            }
            fout<<"\n";
        }
}
int main()
{
    fin>>n>>m;
    fin.get();
     p=u=1;
    for(i=1;i<=n;i++){
        fin.getline(S,105);
        for(j=0;j<m;j++){
            if(S[j]==' ')
                R[i][j+1]=0, J[i][j+1]=0;
            if(S[j]=='X')
                R[i][j+1]=-1, J[i][j+1]=-1;
            if(S[j]=='R')
                R[i][j+1]=1, x1=i, y1=j+1;
            if(S[j]=='J')
                J[i][j+1]=1, x2=i, y2=j+1;
        }
    }
    bordare();
    leeR(x1,y1); leeJ(x2,y2);compar();
    //afis(R); afis(J);
    fout<<Min<<" "<<a<<" "<<b;


}