Cod sursa(job #1344235)

Utilizator mcip1977Muresan Ciprian mcip1977 Data 16 februarie 2015 15:39:35
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.38 kb
#include <fstream>
#include <cstring>
using namespace std;
ifstream is("rj.in");
ofstream os("rj.out");
const int di[]={-1,-1,-1,0,0,1,1,1};
const int dj[]={-1,0,1,-1,1,-1,0,1};
short n,m,A[101][101],B[101][101],X[10001],Y[10001];

int inside(int i, int j)
{
    return i>=1 && j>=1 && i<=n && j<=m;
}

int main()
{
    int i,j,ir,jr,ij,jj,inou,jnou,pas;
    is>>n>>m;
    is.get();
    char c[102];
    for(i=1;i<=n;i++)
            {
                is.getline(c,102);
                for(j=0;j<strlen(c);j++)
                {
                if(c[j]==' ') B[i][j+1]=A[i][j+1]=0;
                else if(c[j]=='X') B[i][j+1]=A[i][j+1]=-1;
                else if(c[j]=='R') {ir=i; jr=j+1; B[i][j+1]=A[i][j+1]=0;}
                else if(c[j]=='J') {ij=i; jj=j+1; B[i][j+1]=A[i][j+1]=0;}
                }
            }

    A[ir][jr]=1;
    X[1]=ir; Y[1]=jr;
    int s=1,d=1;
    while(s<=d && A[ij][jj]==0)
    {
                int i=X[s],j=Y[s];
                for (int k=0;k<8;k++)
                   {
                       inou=i+di[k];
                       jnou=j+dj[k];
                       if(inside(inou,jnou)&& A[inou][jnou]==0)
                            {
                               A[inou][jnou]=A[i][j]+1;
                               d++;
                               X[d]=inou;
                               Y[d]=jnou;
                            }
                   }
        s++;
    }

    B[ij][jj]=1;
    X[1]=ij; Y[1]=jj;
    s=1,d=1;
    while(s<=d && B[ir][jr]==0)
    {
                int i=X[s],j=Y[s];
                for (int k=0;k<8;k++)
                   {
                       inou=i+di[k];
                       jnou=j+dj[k];
                       if(inside(inou,jnou)&& B[inou][jnou]==0)
                            {
                               B[inou][jnou]=B[i][j]+1;
                               d++;
                               X[d]=inou;
                               Y[d]=jnou;
                            }
                   }
        s++;
    }
    pas=10001;
    int x=0,y=0;
    for(i=1;i<=n;i++)
            for(j=1;j<=m;j++)
               if(A[i][j]==B[i][j] && A[i][j]>0 && B[i][j]>0)
               if(pas>A[i][j])
               {
                   pas=A[i][j];x=i; y=j;
               }
    os<<pas<<" "<<x<<" "<<y;
    is.close();
    os.close();
    return 0;
}