Pagini recente » Cod sursa (job #475027) | Cod sursa (job #3130851) | Cod sursa (job #2268948) | Cod sursa (job #1202445) | Cod sursa (job #1884992)
#include<iostream>
#include<fstream>
#include<cstring>
#include<queue>
using namespace std;
fstream fin ("rj.in",ios::in), fout("rj.out",ios::out);
int di[]={-1,0,1,0,1,1,-1,-1};
int dj[]={0,1,0,-1,1,-1,1,-1};
char mat[305][305];
int mi[305][305],ju[305][305],ro[305][305];
int startr1,startr2,startj1,startj2,stopr1,stopr2,stopj1,stopj2;
queue < pair < int,int > > c;
pair<int,int>crt;
void LEE(int a[305][305], int start1,int start2)
{
int k;
a[start1][start2]=1;
c.push(make_pair(start1,start2));
while(!c.empty())
{
crt=c.front();
c.pop();
for(k=0;k<=7;k++)
{
if(a[crt.first+di[k]][crt.second+dj[k]]==0)
{
c.push(make_pair(crt.first+di[k],crt.second+dj[k]));
a[crt.first+di[k]][crt.second+dj[k]]=a[crt.first][crt.second]+1;
}
}
}
}
int main ()
{
int n,m,i,j;
fin>>n>>m;
fin.get();
for(i=1;i<=n;i++)
{
fin.getline(mat[i],305);
}
for(i=1;i<=n;i++)
{
for(j=0;j<=m;j++)
{
if(mat[i][j]=='R')
{
startr1=i;
startr2=j+1;
}
if(mat[i][j]=='J')
{
startj1=i;
startj2=j+1;
}
if(mat[i][j]=='X')
{
mi[i][j+1]=-1;
}
if(mat[i][j]==' ')
{
mi[i][j+1]==0;
}
}
}
for(i=1;i<=n;i++)
{
for(j=0;j<=m;j++)
{
ro[i][j]=mi[i][j];
ju[i][j]=mi[i][j];
}
}
for(i=0;i<=n;i++)
{
ro[0][i]=-1;
ju[0][i]=-1;
ro[i][0]=-1;
ju[i][0]=-1;
}
for(i=0;i<=m;i++)
{
ro[m+1][i]=-1;
ju[m+1][i]=-1;
ro[i][m+1]=-1;
ju[i][m+1]=-1;
}
LEE(ro,startr1,startr2);
LEE(ju,startj1,startj2);
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
{
if((ro[i][j]>0)&&(ju[i][j]==ro[i][j]))
{
fout<<ro[i][j];
fout<<" "<<i<<" "<<j;
break;
}
}
}
fin.close();
fout.close();
return 0;
}