Cod sursa(job #781634)

Utilizator dica69Alexandru Lincan dica69 Data 24 august 2012 19:27:17
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.12 kb
#include <cstdio>

using namespace std;
typedef struct {int x,y;} PUNCT;
int r[101][101],ju[101][101],a[101][101],px[8]={-1,-1,0,1,1,1,0,-1},py[8]={0,1,1,1,0,-1,-1,-1},n,m,i,j,x1,y1,x2,y2,x,y,min;
char c;


void lee(int r[101][101], int x1, int y1)
{PUNCT c[10001],v;
int p,u,l1,c1,i,j;
for (i=1;i<=n;i++)
for (j=1;j<=m;j++) r[i][j]=-1;
c[1].x=x1;c[1].y=y1;
p=u=1;r[x1][y1]=1;
while (p<=u)
{v=c[p];
for (i=0;i<=7;i++)
{l1=v.x+px[i];c1=v.y+py[i];
if (a[l1][c1]==0 && l1>=1 && l1<=n && c1>=1 && c1<=m && r[l1][c1]==-1)
{r[l1][c1]=r[v.x][v.y]+1;
u++;
c[u].x=l1;c[u].y=c1;
}
}
p++;
}
}
int main()
{FILE *f1 = fopen("rj.in","r");
FILE *f2 = fopen("rj.out","w");
fscanf(f1,"%d%d",&n,&m);
for (i=1;i<=n;i++)
{fscanf(f1,"%c",&c);
for (j=1;j<=m;j++) {fscanf(f1,"%c",&c);
if (c==' ') a[i][j]=0;
else if (c=='X') a[i][j]=3;
else if (c=='R') {a[i][j]=1;x1=i;y1=j;}
else if (c=='J') {a[i][j]=2;x2=i;y2=j;}
}
}
lee(r,x1,y1);
lee(ju,x2,y2);
min=10001;
for (i=1;i<=n;i++)
for (j=1;j<=m;j++)
if (r[i][j]==ju[i][j] && r[i][j]<min && r[i][j]!=-1) {min=r[i][j];x=i;y=j;}
fprintf(f2,"%d %d %d",min,x,y);
    return 0;
}