Cod sursa(job #1338355)

Utilizator popescu.octavianPopescu Octavian popescu.octavian Data 9 februarie 2015 23:01:50
Problema Rj Scor 100
Compilator cpp Status done
Runda simulareoji2015cl10 Marime 1.9 kb
#include <cstdio>
using namespace std;
short dx[9]={0, -1, -1, 0, 1, 1, 1, 0, -1}, dy[9]={0, 0, 1, 1, 1, 0, -1, -1, -1};
int n, m, romeo[101][101], julieta[101][101], r[2][10001], j[2][10001], tmin, x, y, xr, yr, xj, yj, i, k, xx, yy;
void citire()
{
    int i, k;
    char ch;
    scanf("%d %d ",&n,&m);
    for(i=1;i<=n;i++){
        for(k=1;k<=m;k++){
            scanf("%c",&ch);
            if(ch=='R'){romeo[i][k]=1;xr=i;yr=k;}
            if(ch=='J'){julieta[i][k]=1;xj=i;yj=k;}
            if(ch==' '){romeo[i][k]=julieta[i][k]=-1;}
        }
        scanf("%c",&ch);
    }
}
void drumromeo()
{
    int ur, pr, i;
    pr=ur=1;
    r[0][pr]=xr;r[1][pr]=yr;
    while(pr<=ur){
        xx=r[0][pr];
        yy=r[1][pr];
        for(i=1;i<=8;i++){
            x=dx[i];
            y=dy[i];
            if(romeo[xx+x][yy+y]==-1){
                ur++;
                r[0][ur]=xx+x;
                r[1][ur]=yy+y;
                romeo[xx+x][yy+y]=romeo[xx][yy]+1;
            }
        }
        pr++;
    }
}
void drumjulieta()
{
    int uj, pj, i;
    pj=uj=1;
    j[0][pj]=xj;j[1][pj]=yj;
    while(pj<=uj){
        xx=j[0][pj];
        yy=j[1][pj];
        for(i=1;i<=8;i++){
            x=dx[i];
            y=dy[i];
            if(julieta[xx+x][yy+y]==-1){
                uj++;
                j[0][uj]=xx+x;
                j[1][uj]=yy+y;
                julieta[xx+x][yy+y]=julieta[xx][yy]+1;
            }
        }
        pj++;
    }
}
int main()
{
    freopen("rj.in","r",stdin);
    freopen("rj.out","w",stdout);
    citire();
    drumromeo();
    drumjulieta();
    tmin=9999999;
    for(i=1;i<=n;i++)
        for(k=1;k<=m;k++)
            if(romeo[i][k]==julieta[i][k]&&romeo[i][k]<tmin&&romeo[i][k]!=0&&romeo[i][k]!=-1){
                x=i;y=k;
                tmin=romeo[i][k];
            }
    printf("%d %d %d",tmin,x,y);
    return 0;
}