Pagini recente » Cod sursa (job #2240828) | Cod sursa (job #1149098) | Cod sursa (job #183543) | Cod sursa (job #561552) | Cod sursa (job #876874)
Cod sursa(job #876874)
#include <fstream>
#include <limits.h>
//#define DEBUG
using namespace std;
ifstream cin("rj.in");
ofstream cout("rj.out");
int n, m, q[3][10010], i, j, l[105][105],b[105][105], k, u, p, mini=INT_MAX, endi, endj, t_min;
char c , a[105];
inline int calc_min(int aa, int bb, int cc, int dd)
{
if(aa==-2 || aa==0)
aa=INT_MAX;
if(bb==-2 || bb==0)
bb=INT_MAX;
if(cc==-2 || cc==0)
cc=INT_MAX;
if(dd==-2 || dd==0)
dd=INT_MAX;
int min1=min(aa, bb);
int min2=min(cc, dd);
return min(min1, min2);
}
void init()
{
cin>>n>>m;
cin.getline(a, 100);
for(i=1;i<=n;i++){
cin.getline(a, 100);
for(j=0;j<m;j++)
{
c=a[j];
if(c=='R')
{
k=1;
l[i][j+1]=0; //pornesc de la romeo
q[1][k]=i;
q[2][k]=j+1;
}
else if(c=='X') //poarta inchisa
{
l[i][j+1]=-2;
b[i][j+1]=-2; //-2
}
else if(c=='J')
{
l[i][j+1]=0;
b[i][j+1]=-3;
endi=i;
endj=j+1;
}
else if(c==' ')
{
l[i][j+1]=-1;
b[i][j]=0;
}
}
}
}
void intr(int c, int d)
{
u=u+1;
q[1][u]=c;
q[2][u]=d;
}
void extr(int &c, int &d)
{
p=p+1;
c=q[1][p];
d=q[2][p];
}
void lee()
{
int x, y;
u=1;
p=0;
while(p!=u)
{
extr(x, y);
if(x>1)
if(b[x-1][y]==0)
if(l[x-1][y]>l[x][y]+1 || l[x-1][y]==-1)
{
l[x-1][y]=l[x][y]+1;
intr(x-1, y);
}
if(x<n)
if(b[x+1][y]==0)
if(l[x+1][y]>l[x][y]+1 || l[x+1][y]==-1)
{
l[x+1][y]=l[x][y]+1;
intr(x+1, y);
}
if(y<m)
if(b[x][y+1]==0)
if(l[x][y+1]>l[x][y]+1 || l[x][y+1]==-1)
{
l[x][y+1]=l[x][y]+1;
intr(x, y+1);
}
if(y>1)
if(b[x][y-1]==0)
if(l[x][y-1]>l[x][y]+1 || l[x][y-1]==-1)
{
l[x][y-1]=l[x][y]+1;
intr(x, y-1);
}
}
}
int main()
{
init();
lee();
#ifdef DEBUG
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
cout<<l[i][j]<<" ";
cout<<"\n";
}
#endif
t_min=((calc_min(l[endi-1][endj], l[endi+1][endj], l[endi][endj-1], l[endi][endj+1]))+1)/2;
cout<<t_min;
return 0;
}