Cod sursa(job #1325340)

Utilizator ovidiuz98Zamfir Ovidiu ovidiuz98 Data 23 ianuarie 2015 20:08:17
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.75 kb
#include <fstream>
#define DIM 102

using namespace std;

ifstream fin("rj.in");
ofstream fout("rj.out");
const int di[]={1,0,-1,0,1,1,-1,-1},dj[]={0,1,0,-1,1,-1,1,-1};
struct coada {short x,y;}C[DIM*DIM];
char s[DIM][DIM];
int a[DIM][DIM],N,M,b[DIM][DIM],L1,C1,L2,C2,P,U;
int main(){
    fin>>N>>M;
    fin.get();
    for(int i=1;i<=N;i++){
        fin.getline(s[i]+1,'\n');
        for(int j=1;j<=M;j++){
            if(s[i][j]=='R'){
                L1=i;
                C1=j;
            }
            if(s[i][j]=='J'){
                L2=i;
                C2=j;
            }
        }
    }
    C[1].x=L1;
    C[1].y=C1;
    P=U=1;
    a[L1][C1]=1;
    while(P<=U){
        coada c=C[P++];
        coada k;
        for(int i=0;i<8;i++){
            k.x=c.x+di[i];
            k.y=c.y+dj[i];
            if(k.x>=1 && k.x<=N && k.y>=1 && k.y<=M && (s[k.x][k.y]==' ' || s[k.x][k.y]=='0') && a[k.x][k.y]==0){
                C[++U]=k;
                a[k.x][k.y]=a[c.x][c.y]+1;
            }
        }
    }
    C[1].x=L2;
    C[1].y=C2;
    P=U=1;
    b[L2][C2]=1;
    while(P<=U){
        coada c=C[P++];
        coada k;
        for(int i=0;i<8;i++){
            k.x=c.x+di[i];
            k.y=c.y+dj[i];
            if(k.x>=1 && k.x<=N && k.y>=1 && k.y<=M && (s[k.x][k.y]==' ' || s[k.x][k.y]=='0') && b[k.x][k.y]==0){
                C[++U]=k;
                b[k.x][k.y]=b[c.x][c.y]+1;
            }
        }
    }
    int minim=0x3f3f3f3f,lmin,cmin;
    for(int i=1;i<=N;i++)
        for(int j=1;j<=M;j++)
            if(a[i][j] && b[i][j] && max(a[i][j],b[i][j])<minim)
                minim=max(a[i][j],b[i][j]),lmin=i,cmin=j;
    fout<<minim<<" "<<lmin<<" "<<cmin;
    fin.close();fout.close();
    return 0;
}