Pagini recente » Cod sursa (job #101118) | Cod sursa (job #2770264) | Cod sursa (job #1806501) | Cod sursa (job #1393465) | Cod sursa (job #2915961)
#include <fstream>
#include <queue>
#define Nmax 105
using namespace std;
ifstream cin ("rj.in");
ofstream cout ("rj.out");
int b[Nmax][Nmax],c[Nmax][Nmax],n,m;
short di[]={-1,-1,-1,0,1,1,1,0};
short dj[]={-1,0,1,1,1,0,-1,-1};
struct cordonates
{
int row;
int col;
};
void boardind (int mat[Nmax][Nmax])
{
for(int i = 0 ; i <= m+1; ++i) mat[0][i]=mat[n+1][i]=1;
for(int i = 1 ; i < m; ++i) mat[i][0]=mat[i][m+1]=1;
}
cordonates rom,jul;
void read_and_optimise()
{
string ch;
cin >> n >> m;
getline(cin,ch);
for(int i = 1 ; i <= n ; ++i){
getline(cin,ch);
for(int j = 0 ; j <m ; ++j)
{
if(ch[j]=='R') rom.row=i , rom.col=j+1;
else if(ch[j]=='J') jul.row=i , jul.col=j+1;
else if(ch[j]=='X') b[i][j+1]=c[i][j+1]=1;
}
}
}
void Lee(int i,int j,int mat[Nmax][Nmax])
{
queue<pair<int,int>>q;
mat[i][j]=1;
q.push(make_pair(i,j));
while(!q.empty())
{
int ii=q.front().first;
int jj=q.front().second;
q.pop();
for(int k = 0 ; k <= 7 ; ++k)
{
int i_nou=ii+di[k];
int j_nou=jj+dj[k];
if(!mat[i_nou][j_nou])
{
q.push(make_pair(i_nou,j_nou));
mat[i_nou][j_nou]=1+mat[ii][jj];
}
}
}
}
void solve()
{
int tmin=1e5;
cordonates ans;
Lee(rom.row,rom.col,b);
Lee(jul.row,jul.col,c);
for(int i = 1 ; i <=jul.row ; ++i)
for(int j = 1; j <= m ; ++j)
if(b[i][j]==c[i][j] && b[i][j]<tmin && b[i][j]!=1 && b[i][j]!=0) tmin=b[i][j],ans.row=i,ans.col=j;
cout<<tmin<<" "<<ans.row<<' '<<ans.col<<' ';
}
int main()
{
read_and_optimise();
boardind(b);
boardind(c);
solve();
}