Pagini recente » Cod sursa (job #905965) | Cod sursa (job #600648) | Cod sursa (job #67135) | Cod sursa (job #2696460) | Cod sursa (job #2537202)
#include <bits/stdc++.h>
#define NMAX 100
#define NDIR 8
#define NCOADA 512
#define BAZA256 256
#define INFINIT 10000
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");
int prim,ultim;
unsigned short coada[NCOADA];
char oras[NMAX+2][NMAX+2];
short romeo[NMAX+2][NMAX+2],julieta[NMAX+2][NMAX+2];
int dl[NDIR]={0,-1,-1,-1,0,1,1,1},dc[NDIR]={1,1,0,-1,-1,-1,0,1};
inline void enqueue(int l,int c){
coada[ultim]=1*BAZA256+c;
ultim=(ultim+1)%NCOADA;
}
inline int dequeue(){
int retval=coada[prim];
prim=(prim+1)%NCOADA;
return retval;
}
void distantelee(int l,int c,short dist[NMAX+2][NMAX+2]){
int d,i;
enqueue(l,c);
dist[l][c]=l;
do{
l=dequeue();
c=l%BAZA256;
l/=BAZA256;
d=dist[l][c];
for(i=0;i<NDIR;i++)
if(dist[l+dl[i]][c+dc[i]]==0 && oras[l+dl[i]][c+dc[i]]==' ')
{
enqueue(l+dl[i],c+dc[i]);
dist[l+dl[i]][c+dc[i]]=d+1;
}
}while(prim!=ultim);
}
int main()
{
int n,m,l,c,lr,cr,lj,cj,lmeet,cmeet,mi;
char x;
fin>>n>>m;
for(l=0;l<=n+1;l++)
oras[l][0]=oras[l][m+1]='X';
for(c=1;c<=m;c++)
oras[0][c]=oras[n+1][c]='X';
for(l=1;l<=n;l++)
for(c=1;c<=m;c++)
{
fin>>oras[l][c];
if(oras[l][c]=='R'){lr=l;cr=c;}
else if(oras[l][c]=='J'){lj=l;cj=c;}
}
distantelee(lr,cr,romeo);
distantelee(lj,cj,julieta);
mi=INFINIT;
for(l=1;l<=n;l++)
for(c=1;c<=m;c++)
if(romeo[l][c]==julieta[l][c] && romeo[l][c]>0 && romeo[l][c]<mi){lmeet=l;cmeet=c;mi=romeo[l][c];}
fout << mi<<" "<<lmeet<<" "<<cmeet<<" " << endl;
return 0;
}