Cod sursa(job #1288929)

Utilizator usermeBogdan Cretu userme Data 9 decembrie 2014 10:52:40
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.55 kb
#include <stdio.h>
using namespace std;
int dirl[8]={-1,-1,0,1,1,0,-1},dirc[8]={0,1,1,1,0,-1,-1,-1},romeo[102][102],julieta[102][102],n,m,i,j,incl,incc,sfl,sfc,inc,sf,linie,coloana,rl,rc,jc,jl,ugh=20000,l1,c1;
char c;
struct pozitie{int lin,col;};
pozitie coada[10405];
int main(){
    freopen("rj.in","r",stdin);
    freopen("rj.out","w",stdout);
	scanf("%d%d",&n,&m);
	for(i=0;i<=m+1;i++){
        romeo[0][i]=-1;
        romeo[n+1][i]=-1;
	}
	for(i=1;i<=n;i++){
        romeo[i][0]=-1;
        romeo[i][m+1]=-1;
	}
	scanf("%c",&c);
	for(i=1;i<=n;i++){
        for(j=1;j<=m;j++){
            scanf("%c",&c);
            if(c!=' '){
                if(c=='X') romeo[i][j]=-1;
                else{ if(c=='R'){romeo[i][j]=-3;rl=i;rc=j;}
                else {romeo[i][j]=-2;jl=i;jc=c;}}
            }
            julieta[i][j]=romeo[i][j];
        }
        scanf("%c",&c);
	}
	romeo[rl][rc]=1;
	inc=1;sf=1;
	coada[1].lin=rl;
	coada[1].col=rc;
	while(inc<=sf){
        for(i=0;i<=7;i++){
            linie=coada[inc].lin+dirl[i];
            coloana=coada[inc].col+dirc[i];
            if(romeo[linie][coloana]==0){
                sf++;
                coada[sf].lin=linie;
                coada[sf].col=coloana;
                romeo[linie][coloana]=romeo[coada[inc].lin][coada[inc].col]+1;
            }
            //else if(romeo[linie][coloana]>0){
            //    sf++;
            //    coada[sf].lin=linie;
            //    coada[sf].col=coloana;
            //    romeo[linie][coloana]=romeo[coada[inc].lin][coada[inc].col]+1;
            //}
        }
        inc++;
	}
	julieta[jl][jc]=1;
	inc=1;sf=1;
	coada[1].lin=jl;
	coada[1].col=jc;
	while(inc<=sf){
        for(i=0;i<=7;i++){
            linie=coada[inc].lin+dirl[i];
            coloana=coada[inc].col+dirc[i];
            if(julieta[linie][coloana]==0){
                sf++;
                coada[sf].lin=linie;
                coada[sf].col=coloana;
                julieta[linie][coloana]=julieta[coada[inc].lin][coada[inc].col]+1;
            }
            /*else if(julieta[linie][coloana]>0){
                sf++;
                coada[sf].lin=linie;
                coada[sf].col=coloana;
                julieta[linie][coloana]=julieta[coada[inc].lin][coada[inc].col]+1;
            }*/
        }
        inc++;
	}
    for(i=1;i<=n;i++)
        for(j=1;j<=m;j++)
        if(romeo[i][j]==julieta[i][j]&&romeo[i][j]<ugh){
            ugh=romeo[i][j];
            l1=i;
            c1=j;
        }
    printf("%d %d %d",ugh,l1,c1);
	return 0;
}