Pagini recente » Cod sursa (job #799428) | Cod sursa (job #3131961) | Cod sursa (job #700221) | Cod sursa (job #701356) | Cod sursa (job #1786194)
#include <iostream>
#include <fstream>
#include <queue>
using namespace std;
ifstream fin("rj.in");
ofstream fout("rj.out");
int n,m,mat[110][110],mat2[110][110],d,ii,jj,mn=10001;
int dx[]={-1,-1,-1,0,1,1,1,0};
int dy[]={-1,0,1,1,1,0,-1,-1};
string s;
queue <pair<int,int> > r,ju;
int interior(int i,int j)
{
if(i>=1 && i<=n && j>=1 && j<=m && mat[i][j]!=-1)
return 1;
return 0;
}
void parc(int i,int j)
{
for(d=0;d<=7;d++)
{
ii=i+dx[d];
jj=j+dy[d];
if(interior(ii,jj) && (mat[ii][jj]>mat[i][j]+1 || mat[ii][jj]==0))
{
mat[ii][jj]=mat[i][j]+1;
r.push(make_pair(ii,jj));
}
}
}
void parcj(int i,int j)
{
for(d=0;d<=7;d++)
{
ii=i+dx[d];
jj=j+dy[d];
if(interior(ii,jj) && (mat2[ii][jj]>mat2[i][j]+1 || mat2[ii][jj]==0))
{
mat2[ii][jj]=mat2[i][j]+1;
ju.push(make_pair(ii,jj));
}
}
}
void rezultat()
{
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
{
if(mat[i][j]==mat2[i][j] && mat[i][j]>0 &&mat[i][j]<mn)
{
mn=mat[i][j];
ii=i;
jj=j;
}
}
fout<<mat[ii][jj]<<" "<<ii<<" "<<jj<<"\n";
}
int main()
{
fin>>n>>m;
getline(fin,s);
for(int i=1;i<=n;i++)
{
getline(fin,s);
for(int j=0;j<m;j++)
{
if(s[j]=='R')
{
mat[i][j+1]=1;
r.push(make_pair(i,j+1));
}
if(s[j]=='X')
{
mat[i][j+1]=-1;
mat2[i][j+1]=-1;
}
if(s[j]=='J')
{
mat2[i][j+1]=1;
ju.push(make_pair(i,j+1));
}
}
}
while(!r.empty())
{
parc(r.front().first,r.front().second);
r.pop();
}
while(!ju.empty())
{
parcj(ju.front().first,ju.front().second);
ju.pop();
}
rezultat();
return 0;
}