Cod sursa(job #75990)
Utilizator | Data | 7 august 2007 12:15:04 | |
---|---|---|---|
Problema | Rj | Scor | Ascuns |
Compilator | cpp | Status | done |
Runda | Marime | 3.08 kb |
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#define Max 103
FILE*f=fopen("rj.in","r");
FILE*g=fopen("rj.out","w");
int r[Max][Max],j[Max][Max],n,m,xr,yr,xj,yj;
int dx[8]={0,0,1,1,1,-1,-1,-1};
int dy[8]={1,-1,0,-1,1,1,0,-1};
void read()
{
char c;
int p,i;
fscanf(f,"%d %d\n",&n,&m);
for(i=1;i<=n;++i)
{
for(int p=1;p<=m;++p)
{
c=fgetc(f);
if(c=='X') { r[i][p]=-2; j[i][p]=-2;}
else if (c=='R') { r[i][p]=0; j[i][p]=-2; xr=i; yr=p;}
else if (c=='J') { j[i][p]=0; r[i][p]=-2; xj=i; yj=p;}
else if(c==' ') { r[i][p]=-1; j[i][p]=-1;}
}
c=fgetc(f);
}
}
void det_drum(int x,int y,int d[Max][Max])
{
int c[60000][2];
int inc,sf,p,k,i;
inc=sf=0;
c[0][0]=x;
c[0][1]=y;
while(inc<=sf)
{
x=c[inc][0];
y=c[inc++][1];
for(i=0;i<8;++i)
{
p=x+dx[i];
k=y+dy[i];
if(d[p][k]==-1)
{
d[p][k]=d[x][y]+1;
c[++sf][0]=p;
c[sf][1]=k;
}
}
}
}
void solve()
{
det_drum(xr,yr,r);
det_drum(xj,yj,j);
}
void debug()
{
for(int i=1;i<=n;++i)
{
for(int jj=1;jj<=m;++jj)
fprintf(g,"%d ",r[i][jj]);
fprintf(g,"\n");
}
fprintf(g,"\n");
for(int i=1;i<=n;++i)
{for(int jj=1;jj<=m;++jj)
fprintf(g,"%d ",j[i][jj]);
fprintf(g,"\n");
}
}
void bordare()
{
for(int i=0;i<=n+1;++i)
{
r[i][0]=-2; r[i][m+1]=-2;
}
for(int i=0;i<=m+1;++i) { r[0][i]=-2; r[n+1][i]=-2;}
for(int i=0;i<=n+1;++i)
{
j[i][0]=-2; j[i][m+1]=-2;
}
for(int i=0;i<=m+1;++i) { j[0][i]=-2; j[n+1][i]=-2;}
}
void search_min()
{
int i,jj,min,p,k;
min=30000;
p=-1; k=-1;
for(i=1;i<=n;++i)
for(jj=1;jj<=m;++jj)
if(r[i][jj]==j[i][jj]&&r[i][jj]!=-2)
{
if(min>r[i][jj])
{
min=r[i][jj];
p=i;
k=jj;
}
}
fprintf(g,"%d %d %d\n",min,p,k);
}
int main()
{
read();
bordare();
solve();
search_min();
debug();
return 0;
}