Cod sursa(job #868895)
Utilizator | Data | 31 ianuarie 2013 18:59:21 | |
---|---|---|---|
Problema | Rj | Scor | 100 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 2.96 kb |
#include<cstdio>
#include<string.h>
FILE *fin=fopen("rj.in", "r");
FILE *fout=fopen("rj.out", "w");
using namespace std;
int n,m,xr,yr,xj,yj,mj[105][105],mr[105][105];
int l[10005],coloana[10005];
void generare()
{
int i,j;
char c[105];
fscanf(fin, "%d%d", &n, &m);
fscanf(fin, "%c", &c);
for(i=1;i<=n;i++)
{
fgets(c,m+2, fin);
for(j=0;j<=m-1;j++)
{
if(c [j]=='R')
{
mr[i][j+1]=1;
mj[i][j+1]=-2;
xr=i, yr=j+1;
}
else if(c[j]=='J')
{
mr[i][j+1]=-2;
mj[i][j+1]=1;
xj=i, yj=j+1;
}
else if(c[j]=='X')
mr[i][j+1]=mj[i][j+1]=-1;
else if(c[j]==' ')
mj[i][j+1]=mr[i][j+1]=-2;
}
}
}
void Lee_julieta()
{
int i,j;
int x,y,k;
int xnou,ynou;
int dx[]={-1,0,0,1,-1,1,1,-1},dy[]={0,1,-1,0,-1,-1,1,1};
k=1;
l[1]=xj;
coloana[1]=yj;
for(i=1;i<=k;i++)
{
x=l[i];
y=coloana[i];
for(j=0;j<=7;j++)
{
xnou=x+dx[j];
ynou=y+dy[j];
if(mj[xnou][ynou]==-2)
{
mj[xnou][ynou]=mj[x][y]+1;
k++;
l[k]=xnou;
coloana[k]=ynou;
}
}
}
}
void Lee_romeo()
{
int i,j;
int x,k,y;
int xnou,ynou;
int dx[]={-1,0,0,1,-1,1,1,-1},dy[]={0,1,-1,0,-1,-1,1,1};
k=1;
l[1]=xr;
coloana[1]=yr;
for(i=1;i<=k;i++)
{
x=l[i];
y=coloana[i];
for(j=0;j<=7;j++)
{
xnou=x+dx[j];
ynou=y+dy[j];
if(mr[xnou][ynou]==-2)
{
mr[xnou][ynou]=mr[x][y]+1;
k++;
l[k]=xnou;
coloana[k]=ynou;
}
}
}
}
void comparare()
{
int i,j,l,c,timp;
timp=2000000;
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)
if( (mr[i][j]==mj[i][j]) && (mj[i][j]!=-1) && (mj[i][j]!=-2) )
{
if(mj[i][j]<timp)
{
timp=mj[i][j];
l=i;
c=j;
}
}
fprintf(fout,"%d %d %d",timp, l, c);
fclose(stdout);
}
int main()
{
generare();
Lee_romeo();
Lee_julieta();
comparare();
return 0;
}