Pagini recente » Cod sursa (job #2311058) | Cod sursa (job #2835020) | Cod sursa (job #2237037) | Cod sursa (job #1117104) | Cod sursa (job #2161257)
#include <iostream>
#include <fstream>
#include <queue>
#include <cstring>
#include <iomanip>
#include <climits>
using namespace std;
ifstream in("rj.in");
ofstream out("rj.out");
int m1[105][105],n,m,ii,jj,m3[105][105],x,y,Min=INT_MAX;
int di[8]={-1,0,1,0,-1,1,1,-1};
int dj[8]={0,1,0,-1,-1,1,-1,1};
char p,m2[105];
bool ok2=0;
queue < pair <int ,int > > coada1,coada2;
void citire()
{
in>>m >>n;
in.get();
for(int i=1;i<=n;i++)
{
in.get(m2,105);
in.get();
for(int j=0;j<m;j++)
{
if(m2[j]==' ')
m1[i][j+1]=0;
else if(m2[j]=='X')
m1[i][j+1]=-1;
else if(m2[j]=='R')
{
m1[i][j+1]=1;
coada1.push(make_pair(i,j+1));
}
else if(m2[j]=='J')
{
m3[i][j+1]=1;
coada2.push(make_pair(i,j+1));
}
}
}
}
bool ok(int i,int j)
{
if(i<1 || j<1 || i>n || j>m)
return 0;
if(m1[i][j]==-1)
return 0;
return 1;
}
void Lee()
{
while(!coada1.empty())
{
int i=coada1.front().first;
int j=coada1.front().second;
coada1.pop();
for (int d=0;d<8;d++)
{
int ni=i+di[d];
int nj=j+dj[d];
if(ok(ni,nj) && (m1[ni][nj]==0))
{
m1[ni][nj]=m1[i][j]+1;
coada1.push(make_pair(ni,nj));
}
}
}
while(!coada2.empty())
{
int i=coada2.front().first;
int j=coada2.front().second;
coada2.pop();
for (int d=0;d<8;d++)
{
int ni=i+di[d];
int nj=j+dj[d];
if(ok(ni,nj) &&(m3[ni][nj]==0))
{
m3[ni][nj]=m3[i][j]+1;
coada2.push(make_pair(ni,nj));
}
}
}
}
void sol()
{
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
if(ok(i,j) &&(m3[i][j]!=0))
{
if(m1[i][j]==m3[i][j])
{
if(m1[i][j]<Min)
{
Min=m1[i][j];
x=i;
y=j;
}
}
}
out<<m1[x][y]<<"\n";
out<<x<<" "<<y;
}
void afisare()
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
cout<<setw(3)<<m1[i][j]<<" ";
cout<<"\n";
}
}
int main()
{
citire();
Lee();
sol();
return 0;
}