Pagini recente » Cod sursa (job #558103) | Cod sursa (job #808777) | Cod sursa (job #2559282) | Cod sursa (job #109773) | Cod sursa (job #505307)
Cod sursa(job #505307)
#include<cstdio>
const int NMAX = 1<<7;
struct POINT { int x , y ; } ;
POINT romeo,julieta;
POINT q [NMAX*NMAX];
int matR[NMAX][NMAX];
int matJ[NMAX][NMAX];
int n , m ;
int dx[] = { 1 , -1 , 0 , 0 , -1 , -1 , 1 , 1 } ;
int dy[] = { 0 , 0 , 1 , -1 , 1 , -1 , 1 , -1 } ;
void afisareR ( )
{
int i , j ;
for ( i = 1 ; i <= n ; ++ i )
{
for ( j = 1 ; j <= m ; ++ j )
printf ( "%2d ", matR[i][j] ) ;
printf ( "\n" ) ;
}
}
void afisareJ ( )
{
int i , j ;
for ( i = 1 ; i <= n ; ++ i )
{
for ( j = 1 ; j <= m ; ++ j )
printf ( "%2d ", matJ [i][j] ) ;
printf ( "\n" ) ;
}
}
void bordare ( )
{
int i , j ;
for ( i = 0 ; i <= n + 1 ; ++ i )
matR[i][0]=matR[i][m+1]=matJ[i][0]=matJ[i][m+1]=-1;
for ( j = 0 ; j <= m + 1 ; ++ j )
matR[0][j]=matR[n+1][j]=matJ[0][j]=matJ[n+1][j]=-1;
}
void lee ( POINT start , int matQ[NMAX][NMAX] )
{
int p , u , c;
int xn , yn ;
p=u=1;
q[p].x = start.x ;
q[p].y = start.y ;
while ( p <= u )
{
for ( c = 0 ; c < 8 ; ++ c )
{
xn=q[p].x + dx[c];
yn=q[p].y + dy[c];
if ( matQ[xn][yn] == 0 )
{
q[++u].x = xn ;
q[u].y = yn ;
matQ[xn][yn] = matQ[q[p].x][q[p].y] + 1 ;
}
}
++p;
}
}
int main ( )
{
freopen ( "rj.in", "r", stdin ) ;
freopen ( "rj.out", "w", stdout ) ;
int i , j ;
char s[NMAX];
scanf ( "%d%d ", & n , & m ) ;
for ( i =1 ; i <= n; ++ i )
{
gets ( s ) ;
for ( j = 0 ; s[j]; ++ j )
if ( s[j] == 'R' )
{
romeo.x = i ;
romeo.y= j+1;
matR[i][j+1]=1;
}
else
if ( s[j] == 'J' )
{
julieta.x = i ;
julieta.y = j+1;
matJ[i][j+1]=1;
}
else
if ( s[j] == 'X' )
matR[i][j+1]=matJ[i][j+1]=-1;
}
bordare ( ) ;
lee ( romeo , matR) ;
lee ( julieta , matJ ) ;
//afisareR () ;
//printf ( "\n" );
//afisareJ () ;
for ( i = 1 ; i <= n ; ++ i )
for ( j = 1 ; j <= m ; ++ j )
if ( matR[i][j] == matJ[i][j] && matR[i][j] != -1 && matR[i][j] != 0 )
{
printf ( "%d %d %d\n", matR[i][j] , i , j ) ;
return 0 ;
}
return 0 ;
}