Cod sursa(job #567914)

Utilizator biroBiro Alexandru biro Data 30 martie 2011 16:46:07
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 3.39 kb
//sursa veche de pe .campion
#include <algorithm>
#define input "rj.in"
#define output "rj.out"
#define DIM 102

int a[DIM][DIM] ;
int b[DIM][DIM] ;
int coada[DIM*DIM][2] ;
int dx[]={0,0,1,-1,1,-1,1,-1} ;
int dy[]={-1,1,0,0,1,-1,-1,1} ;
int n , m ;
int cf1 ,cf2 ;
int inceput=1 ;
int xx , yy ;
int sfarsit=1 ;
int pas ;
char nr ;

void read()
    {
        scanf ("%d%d" , &n , &m ) ;
        for (int i=1 ; i<=n ; i++)
            {
                scanf ("%c" , &nr) ;
                for (int j=1 ; j<=m ; j++)
                    {
                        scanf ("%c" , &nr) ;
                        if (nr=='X')
                            {
                                a[i][j]=-1 ;
                                b[i][j]=-1 ;
                            }
                        else
                            {
                                if (nr=='R')
                                    {
                                        a[i][j]=1 ;
                                        coada[1][0]=i ;
                                        coada[1][1]=j ;
                                    }
                                if (nr=='J')
                                    {
                                        b[i][j]=1 ;
                                        cf1=i ;
                                        cf2=j ;
                                    }
                            }
                    }

            }

    }

void tipar(int a[DIM][DIM])
 {
 for (int i=0 ; i<=n+1 ; i++)
            {
                for (int j=0 ; j<=m+1 ; j++)
                    printf ("%d " ,a[i][j]) ;
            printf ("\n") ;
            }
      printf ("\n") ;printf ("\n") ;printf ("\n") ;
}

void Lee(int a[DIM][DIM])
    {
        for (int i=0 ; i<=n+1 ; i++)
            {
                a[i][m+1]=-1 ;
                a[i][0]=-1 ;

            }
        for (int i=0 ; i<=m+1 ; i++)
            {
                a[n+1][i]=-1 ;
                a[0][i]=-1 ;
            }
	// tipar(a);
		 inceput=1;
        while(inceput<=sfarsit)
            {
				pas=a[coada[inceput][0]][coada[inceput][1]]+1 ;
				for (int k=0 ; k<=7 ; k++)
					{
						if (!a[coada[inceput][0]+dx[k]][coada[inceput][1]+dy[k]])
							{
								a[coada[inceput][0]+dx[k]][coada[inceput][1]+dy[k]]=pas ;
								coada[++sfarsit][0]=coada[inceput][0]+dx[k] ;
								coada[sfarsit][1]=coada[inceput][1]+dy[k] ;
							}
					}
				inceput++ ;
			}


    }

void solve()
    {


        int min=DIM*DIM ;
        for (int i=1 ; i<=n ; i++ )
            {
                for (int j=1 ; j<=m ; j++)
                    {
                        if (a[i][j]==b[i][j] && a[i][j]>0)
                            {
                                if (a[i][j]<min)
                                {
                                    min=a[i][j] ;
                                    xx=i ;
                                    yy=j ;
                                }
                            }
                    }
            }
        printf ("%d %d %d" ,min , xx , yy) ;
    }

int main()
{
    freopen (input,"r",stdin) ;
    freopen (output,"w",stdout) ;

    read() ;

    Lee(a) ;
 //   tipar(a);
    sfarsit=1 ;
    coada[sfarsit][0]=cf1 ;
    coada[sfarsit][1]=cf2 ;

    Lee(b) ;
 //   tipar(b) ;
    solve() ;
    return 0;
}