Cod sursa(job #532158)

Utilizator borsoszalanBorsos Zalan borsoszalan Data 10 februarie 2011 22:02:00
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.31 kb
#include<cstdio>

using namespace std;

#define nn 105

char di[]={-1,-1,0,1,1, 1, 0,-1},
     dj[]={ 0, 1,1,1,0,-1,-1,-1};
int n,m,x,y,tmin;
int a[nn][nn],b[nn][nn];
char ci[nn*nn],cj[nn*nn];

void lee (int aa[nn][nn])
{

    int st=1,dr=1;
    while(st<=dr){
        for(int k=0;k<8;++k){
        int ii=ci[st]+di[k],jj=cj[st]+dj[k];
        if(aa[ii][jj]==0&&ii>0&&ii<=n&&jj<=m&&jj>0){
            aa[ii][jj]=aa[ci[st]][cj[st]]+1;
            ++dr;
            ci[dr]=ii;
            cj[dr]=jj;
        }
        }
        ++st;
    }

}

int main ()
{

    freopen ("rj.in","r",stdin);
    freopen ("rj.out","w",stdout);
    scanf("%d %d",&n,&m);
    char crt;
    scanf("%c",&crt);
    while(crt!='\n')
        scanf("%c",&crt);
    for(int i=1;i<=n;++i){
        for(int j=1;j<=m;++j){
            scanf("%c",&crt);
            if(crt=='X')
                a[i][j]=-1,b[i][j]=-1;
            if(crt=='J')
                a[i][j]=1,ci[1]=i,cj[1]=j;
            if(crt=='R')
                b[i][j]=1,x=i,y=j;
        }
        while(crt!='\n'&&i<n)
            scanf("%c",&crt);
    }
    lee (a);
    ci[1]=x,cj[1]=y;
    lee (b);
    int min=1<<30;
    for(int i=1;i<=n;++i)
    for(int j=1;j<=m;++j)
    if(a[i][j]==b[i][j]&&a[i][j]<min&&a[i][j]>0){
    min=a[i][j];
    x=i;
    y=j;
    }
    printf("%d %d %d\n",min,x,y);

return 0;}