Cod sursa(job #870594)

Utilizator dragos-giidragos ghinoiu dragos-gii Data 3 februarie 2013 17:55:36
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.78 kb
#include<fstream>
#include<cstring>
using namespace std;
int n , m , A[100][100];
struct punct{
	 int x , y ;} c[10004] ;
int dx[]={ 0 , 1 , 1 , 1 , 0 , -1 , -1 , -1 };
int dy[]={ 1 , 1 , 0 , -1 , -1 , -1 , 0 , 1 };
int xa , ya , ok ;
int xc , yc , xv , yv ;
ifstream fin("rj.in");
ofstream fout("rj.out");
int p , u , k ;
int main(){
	 int i , j , po ;
	 char x[104] ;
	 fin >> n >> m;
	 for( i = 0 ; i <= n ; i++ ){
		 fin.getline( x+1 , 104 );
		 for( j = 1 ; j <= m ; j++ )
		 {
			 if( x[j] == 'X' )
				 A[i][j]=-1;
			 if( x[j] == 'R' )
			 {
				 A[i][j]=1;
				 c[1].x=i;
				 c[1].y=j;
			 }
			 if( x[j] == 'J' )
			 {
				 xa=i;
				 ya=j;
			 }
		 }
	 }
	 for( i = 0 ; i <= n+1 ; i++ )
		 A[0][i]=A[n+1][i]=A[i][0]=A[i][n+1]=-1;
	 p=u=1;
	 /*for( i = 1 ; i <= n ; i++ ){
         fout << "\n";
         for( j = 1 ; j <= m ; j++ )
             fout << A[i][j];
     }
     fout<<"\n";*/
	 while( p <= u && !ok )
	 {
		 xc=c[p].x;
		 yc=c[p].y;
		 for( k = 0 ; k <= 8 ; k++ )
		 {
			 xv=xc+dx[k];
			 yv=yc+dy[k];
			 if( A[xv][yv] != -1 )
			 {
				 if( A[xv][yv] == 0 )
				 {
					 A[xv][yv]=A[xc][yc]+1;
					 u++;
					 c[u].x=xv;
					 c[u].y=yv;
				 }
				 else if( A[xv][yv] > A[xc][yc]+1 )
				 {
					 A[xv][yv]=A[xc][yc]+1;
					 u++;
					 c[u].x=xv;
					 c[u].y=yv;
				 }
			 }
			 if( xv == xa && yv == ya )
			 {
				 ok=1;
				 po=A[xv][yv]/2;
			 }
		 }
		 p++;
	 }
	 /* for( i = 1 ; i <= n ; i++ ){
         fout << "\n";
         for( j = 1 ; j <= m ; j++ )
             fout << A[i][j];
     }*/
	 ok=0;
	 for( i = 1 ; i <= n && !ok ; i++ )
		 for( j = 1 ; j <= n ; j++ )
			 if( A[i][j] == po+1 )
			 {
				 
				 xa=i;
				 ya=j;
			 }
	 fout << xa << " " << ya << " " << po;
return 0;
}