Cod sursa(job #887646)

Utilizator shuiusuiu ciprian shuiu Data 23 februarie 2013 22:53:12
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.72 kb
#include <fstream>
int ro[102][102],jul[102][102],n,m;
const int dx[]={0,1,1,1,0,-1,-1,-1};
const int dy[]={1,1,0,-1,-1,-1,0,1};
void bordare(int x[102][102])
{int i;
for(i=0;i<=m;i++)
x[0][i]=-1;
for(i=0;i<=n;i++)
x[i][0]=-1;
for(i=0;i<=n;i++)
     x[m+1][i]=-1;

for(i=0;i<=m;i++)
     x[i][m+1]=-1;
x[n+1][m+1]=-1;
}
struct coada{int x,y;}a[100000];
using namespace std;
void lee(int x[102][102],int pozi, int pozj)
{int ii,jj,i;
    int inceput=0,sfarsit=0;
    a[0].x=pozi;
    a[0].y=pozj;
    while(inceput<=sfarsit)
    {
        ii=a[inceput].x;
        jj=a[inceput].y;
        inceput++;
     for(i=0;i<8;i++)
     if(x[ii+dx[i]][jj+dy[i]]==0)
        {
            sfarsit++;
            x[ii+dx[i]][jj+dy[i]]=x[ii][jj]+1;
            a[sfarsit].x=ii+dx[i];
            a[sfarsit].y=jj+dy[i];
        }
    }

}
int main()
{char x[1000];int i,pozir,pozjr,pozij,pozjj,j;
   ifstream in("rj.in");
   ofstream out("rj.out");
    in>>n>>m;in.getline(x,100);
    for(i=1;i<=n;i++)
    {
        in.getline(x,100);
        for(j=0;j<m;j++)
    {
    if(x[j]==' ') {ro[i][j+1]=0;jul[i][j+1]=0;}

     if(x[j]=='X') {ro[i][j+1]=-1;jul[i][j+1]=-1;}

     if(x[j]=='R') pozir=i,pozjr=j+1;

     if(x[j]=='J') pozij=i,pozjj=j+1;
    }
     }



    ro[pozir][pozjr]=1;
    jul[pozij][pozjj]=1;
    bordare(ro);
    bordare(jul);
    lee(ro,pozir,pozjr);
    lee(jul,pozij,pozjj);
    int mini,minim,minj;
    minim=1000;

    for(i=1;i<=n;i++)
    for(j=1;j<=m;j++)
    if(ro[i][j]==jul[i][j] && minim>ro[i][j]&&ro[i][j]>0)
    {
       minim=ro[i][j];
       mini=i;
       minj=j;
    }
    out<<minim<<" "<<mini<<" "<<minj;


   in.close();
   out.close();
    return 0;
}