Cod sursa(job #878005)

Utilizator sam09Muntean Sam sam09 Data 13 februarie 2013 18:25:20
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.3 kb
#include <fstream>
#include<iomanip>
using namespace std;
ifstream f("rj.in");ofstream g("rj.out");
int a[103][103],b[103][103],xx,yy,n,m,i,j,k,p,u;
int c[20003],x,R,J; char sir[103];
int main()
{
    f>>n>>m;f.get();
    for(j=0;j<=m+1;j++)       {a[0][j]=-1;a[n+1][j]=-1;}
    for(i=0;i<=n+1;i++)        {a[i][0]=-1;a[i][m+1]=-1;}
    for(i=1;i<=n;i++){
        f.get(sir,103);f.get();
        for(j=0;j<m;j++){
              if(sir[j]=='X')a[i][j+1]=-1;
              if(sir[j]=='R'){R=i*1000+j+1;}
              if(sir[j]=='J'){J=i*1000+j+1;}
       }
    }

    for (i=0;i<=n+1;i++)
      for(j=0;j<=m+1;j++)b[i][j]=a[i][j];
//romeo
    i=R/1000;j=R%1000;
    a[i][j]=1;p=1;u=1;
    c[1]=i*1000+j;
    while(p<=u){
    x=c[p];i=x/1000;j=x%1000; //x-punct curent
    if(a[i][j+1]==0) {a[i][j+1]=a[i][j]+1;u++;c[u]=i*1000+j+1;}
    if(a[i][j-1]==0)  {a[i][j-1]=a[i][j]+1;u++;c[u]=i*1000+j-1;}
    if(a[i+1][j]==0)  {a[i+1][j]=a[i][j]+1;u++;c[u]=(i+1)*1000+j;}
    if(a[i-1][j]==0)  {a[i-1][j]=a[i][j]+1;u++;c[u]=(i-1)*1000+j;}

    if(a[i-1][j-1]==0) {a[i-1][j-1]=a[i][j]+1;u++;c[u]=(i-1)*1000+j-1;}
    if(a[i-1][j+1]==0)  {a[i-1][j+1]=a[i][j]+1;u++;c[u]=(i-1)*1000+j+1;}
    if(a[i+1][j+1]==0)  {a[i+1][j+1]=a[i][j]+1;u++;c[u]=(i+1)*1000+j+1;}
    if(a[i+1][j-1]==0)  {a[i+1][j-1]=a[i][j]+1;u++;c[u]=(i+1)*1000+j-1;}

    p++;
    }

//julieta
i=J/1000;j=J%1000;
    b[i][j]=1;p=1;u=1;
    c[1]=i*1000+j;
    while(p<=u){
    x=c[p];i=x/1000;j=x%1000; //x-punct curent
    if(b[i][j+1]==0) {b[i][j+1]=b[i][j]+1;u++;c[u]=i*1000+j+1;}
    if(b[i][j-1]==0)  {b[i][j-1]=b[i][j]+1;u++;c[u]=i*1000+j-1;}
    if(b[i+1][j]==0)  {b[i+1][j]=b[i][j]+1;u++;c[u]=(i+1)*1000+j;}
    if(b[i-1][j]==0)  {b[i-1][j]=b[i][j]+1;u++;c[u]=(i-1)*1000+j;}

    if(b[i-1][j-1]==0) {b[i-1][j-1]=b[i][j]+1;u++;c[u]=(i-1)*1000+j-1;}
    if(b[i-1][j+1]==0)  {b[i-1][j+1]=b[i][j]+1;u++;c[u]=(i-1)*1000+j+1;}
    if(b[i+1][j+1]==0)  {b[i+1][j+1]=b[i][j]+1;u++;c[u]=(i+1)*1000+j+1;}
    if(b[i+1][j-1]==0)  {b[i+1][j-1]=b[i][j]+1;u++;c[u]=(i+1)*1000+j-1;}

    p++;
    }

int ii,jj,mini=100000;
for (i=1;i<=n;i++)
      for(j=1;j<=m;j++)
        if(a[i][j]!=-1&&a[i][j]!=0&&a[i][j]==b[i][j]&&mini>a[i][j]){mini=a[i][j];ii=i;jj=j;}
g<<mini<<" "<<ii<<" "<<jj<<'\n';
    f.close ();
    g.close ();
    return 0;
}