Cod sursa(job #1846384)

Utilizator DeanWinchesterdean winchester DeanWinchester Data 12 ianuarie 2017 17:34:50
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.58 kb
#include <fstream>
#include<algorithm>
using namespace std;
ifstream cin("rj.in");
ofstream cout("rj.out");
struct gutza{
  int l,c;
};
gutza c[1000005];
int i,n,dl[]={-1,0,1,0,1,-1,-1,1,1},dc[]={0,1,0,-1,-1,1,-1,-1,1},m,j,i_1,i_2,j_1,j_2,ju[1005][1005],r[1005][1005],ri,rj,ji,jj,l,k,minim,x,y;
char a[1005][1005],car[101];

void lee(int i_1,int j_1, int r[1005][1005]){
    int p=1,u=1,l1,l2,c1,c2;
    c[p].l=i_1;
    c[p].c=j_1;
    r[i_1][j_1]=1;
    while(p<=u){
        l1=c[p].l;
        c1=c[p].c;
        p++;
        for(i=0;i<9;i++){
            l2=l1+dl[i];
            c2=c1+dc[i];
            if(r[l2][c2]==0){
                u++;
                c[u].l=l2;
                c[u].c=c2;
                r[l2][c2]=1+r[l1][c1];
            }
        }
    }
}



int main()
{
    cin>>n>>m; cin.get();
    for(i=0;i<=n+1;i++){
        for(j=0;j<=m+1;j++){
            r[i][j]=ju[i][j]=-1;
        }
    }
   for(i=1;i<=n;i++){
    cin.getline(car,101);
    for(j=1;j<=m;j++){

        switch(car[j-1]){
        case ' ': r[i][j]=ju[i][j]=0;break;
        case 'R': r[i][j]=1;ju[i][j]=0;ri=i;rj=j;break;
        case 'J': r[i][j]=0;ju[i][j]=1;ji=i;jj=j;break;
        case 'X': r[i][j]=ju[i][j]=-1;break;
        }
    }

   }

    lee(ri,rj,r);
    lee(ji,jj,ju);


    minim=100000;
    for(i=1;i<=n;i++){
        for(j=1;j<=m;j++){
            if(ju[i][j]==r[i][j] && ju[i][j]>0){
                if(r[i][j]<minim){
                    minim=r[i][j];
                    x=i;
                    y=j;
                }

            }
        }
    }

    cout<<minim<<" "<<x<<" "<<y;
    return 0;
}