Cod sursa(job #554381)

Utilizator EstarDaian Dragos Estar Data 14 martie 2011 20:13:02
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.06 kb
#include <fstream>

using namespace std;

ifstream fi("rj.in");
ofstream fo("rj.out");

struct cod {
    int x , y ;
};
int n , m , MIN=2000000000 , MINx , MINy;
int r[102][102] , j[102][102];
cod coada[10000];

void move(int a[102][102] , int x1 , int y1 , int xx , int yy,int &j){
    if(!a[x1][y1]||a[xx][yy]+1<a[x1][y1]) {
            if(a[xx][yy]==-1) {
                a[x1][y1]=1;
            } else a[x1][y1]=a[xx][yy]+1;
            coada[++j].x=x1;
            coada[j].y=y1;
        }
}

void fill(cod x , int a[102][102]) {
    coada[0]=x;
    int i=0,j=0;
    while(coada[i++].x) {
        int x = coada[i-1].x , y = coada[i-1].y ;
        move(a,x,y+1,x,y,j);
        move(a,x+1,y+1,x,y,j);
        move(a,x-1,y+1,x,y,j);
        move(a,x-1,y-1,x,y,j);
        move(a,x+1,y-1,x,y,j);
        move(a,x,y-1,x,y,j);
        move(a,x+1,y,x,y,j);
        move(a,x-1,y,x,y,j);
    }
}

int main() {
    cod R , J;
    string line;
    fi>>n>>m;
    getline(fi,line);
    for(int i=1; i<=n; i++) {
        getline(fi,line);
        for(int l=1; l<=m; l++) {
            if(line[l-1]=='R') {
                r[i][l]=-1;
                j[i][l]=-1;
                R.x=i;
                R.y=l;
            }
            if(line[l-1]=='J') {
                r[i][l]=-1;
                j[i][l]=-1;
                J.x=i;
                J.y=l;
            }
            if(line[l-1]=='X') {
                r[i][l]=-1;
                j[i][l]=-1;
            }
        }
    }
    for(int i=0; i<=m+1; i++) {
        r[i][0]=-1;
        r[i][m+1]=-1;
        j[i][0]=-1;
        j[i][m+1]=-1;
    }
    for(int i=0; i<=n+1; i++) {
        r[0][i]=-1;
        r[n+1][i]=-1;
        j[0][i]=-1;
        j[n+1][i]=-1;
    }
    fill(R , r);
    fill(J , j);
    for(int i=1; i<=n; i++)
        for(int l=1; l<=m; l++)
            if(r[i][l]==j[i][l]&&r[i][l]>0&&r[i][l]<MIN){
                MIN=r[i][l];
                MINx=i;
                MINy=l;
            }
            fo<<MIN+1<<" "<<MINx<<" "<<MINy;
}