Pagini recente » Cod sursa (job #284554) | Cod sursa (job #984056) | Cod sursa (job #1211514) | Cod sursa (job #2785253) | Cod sursa (job #2593480)
#include <stdio.h>
#define MAXC 128
#define MAXN 100
short dl[9] = { -1, -1, -1, 0, 0, 0, 1, 1, 1};
short dc[9] = { -1, 0, 1, -1, 0, 1, -1, 0, 1};
int r[MAXN + 2][MAXN + 2], ju[MAXN + 2][MAXN + 2];
short coadal[MAXC + 1], coadac[MAXC + 1];
int main(){
FILE *fin, *fout;
fin = fopen( "rj.in", "r" );
fout = fopen( "rj.out", "w" );
int n, m, i, j, rl = 0, rc = 0, jl = 0, jc = 0;
char ch;
fscanf( fin, "%d", &m );
fscanf( fin, "%d", &n );
ch = fgetc( fin );
for( i = 1; i <= m; i++ ){
for( j = 1; j <= n; j++ ){
ch = fgetc( fin );
if( ch == 'X' ){
r[i][j] = -1;
ju[i][j] = -1;
}
else if( ch == 'R' ){
rl = i;
rc = j;
}
else if( ch == 'J' ){
jl = i;
jc = j;
}
}
ch = fgetc( fin );
}
for( i = 0; i <= n + 1; i++ ){
r[0][i] = -2;
r[m + 1][i] = -2;
ju[0][i] = -2;
ju[m + 1][i] = -2;
}
for( i = 0; i <= m + 1; i++ ){
r[i][0] = -2;
r[i][n + 1] = -2;
ju[i][0] = -2;
ju[i][n + 1] = -2;
}
int p, u, dist, lin, col;
p = u = 0;
coadal[u] = rl;
coadac[u] = rc;
u = (u + 1) % MAXC;
dist = 1;
r[rl][rc] = dist;
do{
lin = coadal[p];
col = coadac[p];
p = (p + 1) % MAXC;
dist = r[lin][col];
for( i = 0; i < 9; i++ ){
if( r[lin + dl[i]][col + dc[i]] == 0 ){
coadal[u] = lin + dl[i];
coadac[u] = col + dc[i];
u = (u + 1) % MAXC;
r[lin + dl[i]][col + dc[i]] = dist + 1;
}
}
}while( p != u );
p = u = 0;
coadal[u] = jl;
coadac[u] = jc;
u = (u + 1) % MAXC;
dist = 1;
ju[jl][jc] = dist;
do{
lin = coadal[p];
col = coadac[p];
p = (p + 1) % MAXC;
dist = ju[lin][col];
for( i = 0; i < 9; i++ ){
if( ju[lin + dl[i]][col + dc[i]] == 0 ){
coadal[u] = lin + dl[i];
coadac[u] = col + dc[i];
u = (u + 1) % MAXC;
ju[lin + dl[i]][col + dc[i]] = dist + 1;
}
}
}while( p != u );
int drum = 1000000, imin = 200, jmin = 200;
for( i = 1; i <= m; i++ ){
for( j = 1; j <= n; j++ ){
if( r[i][j] == ju[i][j] && r[i][j] > 0 ){
if( drum > r[i][j] ){
drum = r[i][j];
imin = i;
jmin = j;
}
else if( drum == r[i][j] ){
if( i < imin ){
imin = i;
jmin = j;
}
else if( i == imin && j < jmin )
jmin = j;
}
}
}
}
fprintf( fout, "%d %d %d", drum, imin, jmin );
fclose( fin );
fclose( fout );
return 0;
}