Pagini recente » Cod sursa (job #399833) | Cod sursa (job #1278862) | Cod sursa (job #2955723) | Cod sursa (job #3153823) | Cod sursa (job #145773)
Cod sursa(job #145773)
#include<fstream.h>
ifstream f("rj.in");
ofstream g("rj.out");
const dimmax=10000,nmax=102;
typedef struct{int c,l;}element;
int a[nmax][nmax],b[nmax][nmax],n,m,min;
int col[9]={0,0,1,0,-1,-1,1,-1,1};
int lin[9]={0,1,0,-1,0,-1,1,1,-1};
element rom,jul,q;
typedef element coada[dimmax];
void citire(){
int i,j,k;
char c[100];
f>>n>>m;
f.get();
for(i=1;i<=n;i++)
{ f.getline(c,100);
for(j=1;j<=m;j++)
{
if(c[j-1]==' '){a[i][j]=-1;b[i][j]=-1;}
else
if(c[j-1]=='X'){a[i][j]=-2;b[i][j]=-2;}
else
if(c[j-1]=='R'){rom.c=j; rom.l=i;a[i][j]=1;b[i][j]=-1;}
else
if(c[j-1]=='J'){jul.l=i; jul.c=j;b[i][j]=1;a[i][j]=-1;}
}
}
}
void bordare(){
int i,j;
for(i=1;i<=n;i++)
{a[i][m+1]=-2;
a[i][0]=-2;
b[i][m+1]=-2;
b[i][0]=-2;
}
for(i=1;i<=m;i++)
{a[0][i]=-2;
a[n+1][i]=-2;
b[0][i]=-2;
b[n+1][i]=-2;
}}
int lee(){
int csf1=0,csf2=0,cinc1=0,cinc2=0,i,j,k,t=0;
element x1,x2,y1,y2;
element c1[nmax],c2[nmax];
c1[csf1]=rom;
c2[csf2]=jul;
while(csf1>=cinc1&&a[jul.l][jul.c]==-1)
{ x1=c1[cinc1++];
for(k=1;k<9;k++)
{ y1.c=x1.c+col[k];
y1.l=x1.l+lin[k];
if(a[y1.l][y1.c]==-1){c1[++csf1]=y1; a[y1.l][y1.c]=a[x1.l][x1.c]+1; }
}
}
while(csf2>=cinc2&&b[rom.l][rom.c]==-1)
{
x2=c2[cinc2++];
for(k=1;k<9;k++)
{
y2.c=x2.c+col[k];
y2.l=x2.l+lin[k];
if(b[y2.l][y2.c]==-1){c2[++csf2]=y2; b[y2.l][y2.c]=b[x2.l][x2.c]+1; }
}
}
return 0;}
void minim(){
int i,j; min=-1;
for(i=1;i<=n;i++)
for(j=0;j<=m;j++)
if(a[i][j]==b[i][j]&&a[i][j]>0)
if(a[i][j]<min||min<=0){min=a[i][j];q.l=i;q.c=j;}
}
int main(){int i,j;
citire();
bordare();
lee();
minim();
cout<<min<<" "<<q.l<<" "<<q.c;
return 0;}