Pagini recente » Cod sursa (job #2457360) | Cod sursa (job #1887922) | Cod sursa (job #2039721) | Cod sursa (job #1302691) | Cod sursa (job #2162476)
#include <iostream>
#include <fstream>
#include <cmath>
using namespace std;
int a[102][102];
int dl[8]={-1,-1,0,+1,+1,+1,0,-1};
int dc[8]={0,+1,+1,+1,0,-1,-1,-1};
struct lee
{
int l,c;
}coadar[100*100+1],coadaj[100*100+1],pozcr,pozcj;
int main()
{
ifstream fin("rj.in");
ofstream fout("rj.out");
int n,m,i,j,drr=0,str=0,drj=0,stj=0;
char s[101];
fin>>n>>m;
fin.get();
for(i=1;i<=n;i++)
{
fin.getline(s,101);
for(j=1;j<=m;j++)
{
if(s[j-1]=='X')
a[i][j]=10000;
else
if(s[j-1]==' ')
a[i][j]=0;
else
if(s[j-1]=='R')
{
a[i][j]=1;
coadar[drr]=(lee){i,j};
}
else
if(s[j-1]=='J')
{
a[i][j]=-1;
coadaj[drj]=(lee){i,j};
}
}
}
for(i=0;i<=n+1;i++)
{
a[i][0]=10000;
a[i][m+1]=10000;
}
for(i=0;i<=m+1;i++)
{
a[0][i]=10000;
a[n+1][i]=10000;
}
// for(i=0;i<=n+1;i++)
// {
// for(j=0;j<=m+1;j++)
// cout<<a[i][j]<<" ";
// cout<<endl;
// }
int gasit=0,lj,cj,lr,cr,pasj,pasr,lcj,ccj,lcr,ccr,imax,jmax,val;
while(!gasit)
{
pozcj=coadaj[stj];
lj=pozcj.l;
cj=pozcj.c;
pasj=a[lj][cj];
do
{
for(i=0;i<8;i++)
{
lcj=lj+dl[i];
ccj=cj+dc[i];
if(a[lcj][ccj]>=0 and a[lcj][ccj]!=10000)
{
if(a[lcj][ccj]==0)
{
drj++;
coadaj[drj]=(lee){lcj,ccj};
a[lcj][ccj]=pasj-1;
}
else
if(a[lcj][ccj]>0 and gasit==0)
{
gasit=1;
imax=lcj;
jmax=ccj;
if(fabs(a[lcj][ccj])<fabs(pasj-1))
val=fabs(pasj-1);
else
val=fabs(a[lcj][ccj]);
}
}
}
stj++;
pozcj=coadaj[stj];
lj=pozcj.l;
cj=pozcj.c;
}
while(a[lj][cj]==pasj);
// for(i=0;i<=n+1;i++)
// {
// for(j=0;j<=m+1;j++)
// cout<<a[i][j]<<" ";
// cout<<endl;
// }
// return 0;
pozcr=coadar[str];
lr=pozcr.l;
cr=pozcr.c;
pasr=a[lr][cr];
do
{
for(i=0;i<8;i++)
{
lcr=lr+dl[i];
ccr=cr+dc[i];
if(a[lcr][ccr]<=0)
{
if(a[lcr][ccr]==0)
{
drr++;
coadar[drr]=(lee){lcr,ccr};
a[lcr][ccr]=pasr+1;
}
else
if(a[lcr][ccr]<0 and gasit==0)
{
gasit=1;
imax=lcr;
jmax=ccr;
if(fabs(a[lcr][ccr])<fabs(pasr+1))
val=fabs(pasr+1);
else
val=fabs(a[lcr][ccr]);
}
}
}
str++;
pozcr=coadar[str];
lr=pozcr.l;
cr=pozcr.c;
}
while(a[lr][cr]==pasr);
// for(i=0;i<=n+1;i++)
// {
// for(j=0;j<=m+1;j++)
// cout<<a[i][j]<<" ";
// cout<<endl;
// }
}
for(i=1;i<=n;i++)
{
for(j=1;j<=m;j++)
cout<<a[i][j]<<" ";
cout<<endl;
}
fout<<val<<" "<<imax<<" "<<jmax;
return 0;
}