Pagini recente » Cod sursa (job #40838) | Cod sursa (job #2154253) | Cod sursa (job #739078) | Cod sursa (job #515072) | Cod sursa (job #2342871)
#include<bits/stdc++.h>
using namespace std;
ifstream f("rj.in");
ofstream g("rj.out");
int di[8]={0,-1,-1,-1,0,1,1,1},ri,rj,juli,julj;
int dj[8]={1,1,0,-1,-1,-1,0,1};
int a[105][105],n,m,rom[105][105],jul[105][105];
char s[101];
void R_LEE()
{
int i,j;
struct casuta{int i,j;}q[10005];
int inceput=1; int sfarsit=1;
q[1].i=ri;q[1].j=rj;
while(inceput<=sfarsit)
{
i=q[inceput].i;
j=q[inceput].j;
for(int k=0;k<8;k++)
{
int ii=i+di[k];
int jj=j+dj[k];
if(ii>=1 && ii<=n && jj>=1 && jj<=m && rom[ii][jj]==0)
{
rom[ii][jj]=rom[i][j]+1;
q[++sfarsit].i=ii;
q[sfarsit].j=jj;
}
}
inceput++;
}
}
void J_LEE()
{
int i,j;
struct casuta{int i,j;}q[10005];
int inceput=1; int sfarsit=1;
q[inceput].i=juli; q[inceput].j=julj;
while(inceput<=sfarsit)
{
i=q[inceput].i;
j=q[inceput].j;
for(int k=0;k<8;k++)
{
int ii=i+di[k];
int jj=j+dj[k];
if(ii>=1 && ii<=n && jj>=1 && jj<=m && jul[ii][jj]==0)
{
jul[ii][jj]=jul[i][j]+1;
q[++sfarsit].i=ii;
q[sfarsit].j=jj;
}
}
inceput++;
}
}
int main()
{
f>>n>>m;
f.get();
int i,j;
for(i=1;i<=n;i++)
{
f.getline(s,101);
for(j=0;s[j];j++)
if(s[j]=='X')a[i][j+1]=1;
else if(s[j]=='R'){a[i][j+1]=1;ri=i;rj=j+1;}
else if(s[j]=='J'){a[i][j+1]=1;juli=i;julj=j+1;}
}
///copiere rom si jul
for(i=0;i<=n+1;i++)
{
for(j=0;j<=m+1;j++)
{
rom[i][j]=jul[i][j]=a[i][j];
}
}
R_LEE();
J_LEE();
int dmin=n*m+1,imin,jmin;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
if(rom[i][j]==jul[i][j] && rom[i][j]>1)
if(dmin>rom[i][j]){dmin=rom[i][j];imin=i;jmin=j;}
g<<dmin<<' '<<imin<<' '<<jmin;
}