Pagini recente » Cod sursa (job #1848844) | Cod sursa (job #2354543) | Cod sursa (job #2066064) | Cod sursa (job #1737861) | Cod sursa (job #687430)
Cod sursa(job #687430)
#include<fstream>
#include<iomanip>
using namespace std;
int n,m;
int xi[]={-1, 0, 1, 0,-1,-1, 1, 1};
int xj[]={ 0, 1, 0,-1,-1, 1, 1,-1};
int romt[157][157],jult[157][157],harta[157][157];
struct {int i; int j; int t;} aux;
struct {int ii; int jj;} C[10000],aux1;
void read_data()
{int i,j;
char s[256];
ifstream g("rj.in");
g>>n>>m;
g.getline(s,m+1);
for(i=1;i<=n;i++)
{g.getline(s,m+1);
for(j=1;j<=m;j++)
{if(s[j-1]=='X')
harta[i][j]=-1;
if(s[j-1]==' ')
harta[i][j]=0;
if(s[j-1]=='R')
harta[i][j]=1;
if(s[j-1]=='J')
harta[i][j]=2;
}
}
g.close();
}
int check(int a,int b)
{int v;
if((a>0)&&(b>0)&&(a<=n)&&(b<=m)&&(harta[a][b]==0))
v=1;
else
v=0;
return v;
}
void solution()
{int i,j,ok,k,ii,jj;
int inc,sf;
/*for(i=1;i<=n;i++)
{for(j=1;j<=m;j++)
t<<setw(3)<<harta[i][j];
t<<"\n";}*/
inc=sf=0; ok=0;
for(i=1;((i<=n)&&(ok==0));i++)
for(j=1;((j<=m)&&(ok==0));j++)
if(harta[i][j]==1)
ok=1;
romt[i-1][j-1]=1;
C[inc].ii=i-1;
C[inc].jj=j-1;
while(inc<=sf)
{aux1=C[inc++];
for(k=0;k<8;k++)
{ii=aux1.ii+xi[k];
jj=aux1.jj+xj[k];
if(check(ii,jj)==1)
if(romt[ii][jj]==0)
{romt[ii][jj]=romt[aux1.ii][aux1.jj]+1;
sf++;
C[sf].ii=ii;
C[sf].jj=jj;
}
}
}
/*t<<"\n\n";
for(i=1;i<=n;i++)
{for(j=1;j<=m;j++)
t<<setw(3)<<romt[i][j];
t<<"\n";}*/
inc=sf=0; ok=0;
for(i=1;((i<=n)&&(ok==0));i++)
for(j=1;((j<=m)&&(ok==0));j++)
if(harta[i][j]==2)
ok=1;
jult[i-1][j-1]=1;
C[inc].ii=i-1;
C[inc].jj=j-1;
while(inc<=sf)
{aux1=C[inc++];
for(k=0;k<8;k++)
{ii=aux1.ii+xi[k];
jj=aux1.jj+xj[k];
if(check(ii,jj)==1)
if(jult[ii][jj]==0)
{jult[ii][jj]=jult[aux1.ii][aux1.jj]+1;
sf++;
C[sf].ii=ii;
C[sf].jj=jj;
}
}
}
/*t<<"\n\n\n";
for(i=1;i<=n;i++)
{for(j=1;j<=m;j++)
t<<setw(3)<<jult[i][j];
t<<"\n";}
t<<"\n\n";*/
ok=0;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
if((romt[i][j]==jult[i][j])&&(romt[i][j]!=0))
{if(ok==0)
{aux.i=i;
aux.j=j;
aux.t=romt[i][j];
ok=1;}
else
{if(aux.t>romt[i][j])
{aux.i=i;
aux.j=j;
aux.t=romt[i][j];}
if((aux.t==romt[i][j])&&(aux.i>i))
{aux.i=i;
aux.j=j;
aux.t=romt[i][j];}
if((aux.t==romt[i][j])&&(aux.i==i)&&(aux.j>j))
{aux.i=i;
aux.j=j;
aux.t=romt[i][j];}
}
}
}
void display()
{ofstream t("rj.out");
t<<aux.t<<" "<<aux.i<<" "<<aux.j;
t.close();
}
int main()
{
read_data();
solution();
display();
return 0;
}