Pagini recente » Cod sursa (job #1650216) | Cod sursa (job #461912) | Clasament noobmania2 | Cod sursa (job #453631) | Cod sursa (job #261052)
Cod sursa(job #261052)
#include<fstream.h>
#define N 102
#define M 402
int r[N][N],j[N][N],n,m,ro[2],ju[2];
char a[N];
const int d0[8]={1,1,1,-1,-1,-1,0,0};
const int d1[8]={-1,0,1,-1,0,1,-1,1};
ifstream in("rj.in");
ofstream out ("rj.out");
void citire ()
{
int i,k;
in>>n>>m>>ws;
for(i=1;i<=n;i++)
{
in.getline (a,N);
for(k=0;a[k];k++)
{
if(a[k]=='X')
{
r[i][k+1]=-1;
j[i][k+1]=-1;
}
if(a[k]==' ')
{
r[i][k+1]=0;
j[i][k+1]=0;
}
if(a[k]=='R')
{
r[i][k+1]=1;
ro[0]=i;
ro[k]=k+1;
}
if(a[k]=='J')
{
j[i][k+1]=1;
ju[0]=i;
ju[1]=k+1;
}
}
}
for(i=0;i<=n+1;++i)
r[i][0]=j[i][0]=r[i][m+1]=j[i][m+1]=-1;
for(i=0;i<=m+1;++i)
r[0][i]=j[0][i]=r[n+1][i]=j[n+1][i]=-1;
}
void scrie (int r[N][N])
{
int i,k;
for (i=1;i<=n;i++)
{
for(k=1;k<=m;k++)
out<<r[i][k]<<"\t";
out<<endl;
}
out<<endl;
}
inline void inc(int &x)
{
x=(x==M-1 ? 0 : x+1);
}
void bfs (int v[N][N], int x0[2])
{
int p=0,u=0,i,x[2],y[2],coada[M][2];
coada[u][0]=x0[0];
coada[u][1]=x0[1];
inc(u);
while(p!=u)
{
x[0]=coada[p][0];
x[1]=coada[p][1];
inc(p);
for(i=0;i<8;i++)
{
y[0]=x[0]+d0[i];
y[1]=x[1]+d1[i];
if(v[y[0]][y[1]]==0)
{
coada[u][0]=y[0];
coada[u][1]=y[1];
inc(u);
v[y[0]][y[1]]=1+v[x[0]][x[1]];
}
}
}
}
int main ()
{
int i,k,w,q,min=32767;
citire ();
//scrie (j);
bfs(r,ro);
bfs(j,ju);
//scrie(r);
//scrie(j);
for(i=1;i<=n;i++)
for(k=1;k<=m;k++)
if(r[i][k]==j[i][k] && r[i][k]>=1)
if(min>r[i][k])
{
min=r[i][k];
w=i;
q=k;
}
out<<w<<" "<<q<<" "<<min-1<<endl;
//scrie();
in.close ();
out.close ();
return 0;
}