Cod sursa(job #1075150)

Utilizator bobbychivescuChivescu Bogdan-Andrei bobbychivescu Data 8 ianuarie 2014 18:14:35
Problema Rj Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.56 kb
#include <cstdio>
#include <cmath>
#define nmax 102
using namespace std;
int a[nmax][nmax], b[nmax][nmax], dl[]={-1,-1,0,1,1,1,0,-1}, dc[]={0,1,1,1,0,-1,-1,-1};
int n, m, k, x, y, min=9000, xr, yr, xj, yj;
char c;
void citire()
{
    freopen("rj.in", "r", stdin);
    scanf("%d%d", &n, &m);
    int i, j;
    for(i=1; i<=n; i++) {scanf("%c", &c);
        for(j=1; j<=m; j++){
            scanf("%c", &c);
            if(c=='X') a[i][j]=-1;
            if(c=='R') {xr=i; yr=j;}
            if(c=='J') {xj=i; yj=j;}
        }
    }
    fclose(stdin);
    for(i=0; i<=n+1; i++)a[i][0]=a[i][m+1]=-1;
    for(i=0; i<=m+1; i++)a[0][i]=a[n+1][i]=-1;
    for(i=0; i<=n+1; i++) for(j=0; j<=m+1; j++) b[i][j]=a[i][j];
}
void lee(int d[nmax][nmax], int x, int y)
{
    struct pozitie {int lin, col;}c[nmax*nmax], p, v;
    c[0].lin=x; c[0].col=y;
    d[x][y]=1;
    v.lin=v.col=0;
    int prim=0, ultim=0;
    while(prim<=ultim){
        p=c[prim]; prim++;
        for(k=0; k<8; k++){
            v.lin=p.lin+dl[k]; v.col=p.col+dc[k];
            if(d[v.lin][v.col]==0){
                d[v.lin][v.col]=d[p.lin][p.col]+1;
                ultim++; c[ultim]=v;
            }
        }
    }
}
int main()
{

    citire();
    lee(a, xr, yr);
    lee(b, xj, yj);
    int i, j;
    for(i=1; i<=n; i++)
        for(j=1; j<=m; j++)
            if(a[i][j]!=-1 && a[i][j]==b[i][j]){
                if(a[i][j]<min){ min=a[i][j]; x=i; y=j;}
            }
    freopen("rj.out", "w", stdout);
    printf("%d %d %d", min, x, y);
    fclose(stdout);
    return 0;
}