Cod sursa(job #908175)

Utilizator mcip1977Muresan Ciprian mcip1977 Data 8 martie 2013 20:31:02
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.16 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};
int n,m,a[101][101],b[101][101];
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;
    char c[101];
    is>>n>>m;
    is.get();
    for(i=1;i<=n;i++)
            {
                is.getline(c,101);
                for(j=0;j<strlen(c);j++)
                {
                if(c[j]==' ') a[i][j+1]=0;
                else if(c[j]=='X') a[i][j+1]=-1;
                else if(c[j]=='R') {ir=i; jr=j+1; a[i][j+1]=0;}
                else if(c[j]=='J') {ij=i; jj=j+1; a[i][j+1]=0;}
                }
            }

    for(i=1;i<=n;i++)
            for(j=1;j<=m;j++) b[i][j]=a[i][j];

    a[ir][jr]=1;
    pas=1;
    do
    {
        for(i=1;i<=n;i++)
            for(j=1;j<=m;j++)
                if(a[i][j]==pas)
                   for (int d=0;d<8;d++)
                   {
                       inou=i+di[d];
                       jnou=j+dj[d];
                       if(inside(inou,jnou))
                            if(a[inou][jnou]==0)
                               a[inou][jnou]=pas+1;
                   }
        pas++;
    }
    while(a[ij][jj]==0);

    b[ij][jj]=1;
    pas=1;
    do
    {
        for(i=1;i<=n;i++)
            for(j=1;j<=m;j++)
                if(b[i][j]==pas)
                   for (int d=0;d<8;d++)
                   {
                       inou=i+di[d];
                       jnou=j+dj[d];
                       if(inside(inou,jnou))
                            if(b[inou][jnou]==0)
                               b[inou][jnou]=pas+1;
                   }
        pas++;
    }
    while(b[ir][jr]==0);

    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;
}