Cod sursa(job #244826)

Utilizator iepureAndreea iepure Data 16 ianuarie 2009 01:00:16
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.71 kb
#include<stdio.h>
#include<iostream.h>
#include<values.h>
int a[100][100], b[100][100], cx1[1000], cx2[1000], cy1[1000], cy2[1000];
int main()
{int m, n,  i, j, rx, ry, jx, jy, p, u, x, y, min=MAXINT, z, t, xnou, ynou, dx[]={0, -1, -1, 0, 1, 1, 1, 0, -1}, dy[]={0, 0, 1, 1, 1, 0, -1, -1, -1};
 char c;
 FILE *f=fopen("rj.in","r");
 FILE *g=fopen("rj.out","w");
 fscanf (f,"%d %d", &m, &n);
 fscanf (f,"%c",&c);
 for (i=1;i<=m;i++) {for (j=1;j<=n;j++) {fscanf (f,"%c",&c);
					if (c=='X') a[i][j]=b[i][j]=-1;
                                        else if (c==' ') a[i][j]=b[i][j]=0;
					else if (c=='R') {b[i][j]=1;
							  rx=i;
							  ry=j;
							  }
					     else if (c=='J') {a[i][j]=1;
							       jx=i;
							       jy=j;
							       }
					}
		    fscanf (f,"%c",&c);
		    }


 p=u=1;
 a[jx][jy]=1;
 cx1[u]=jx;
 cy1[u]=jy;
 while (p<=u) {x=cx1[p];
	       y=cy1[p];
	       for (i=1;i<=8;i++) {xnou=x+dx[i];
				   ynou=y+dy[i];
				   if (a[xnou][ynou]==0) {a[xnou][ynou]=a[x][y]+1;
							  cx1[++u]=xnou;
							  cy1[u]=ynou;
							  }
				   }
	       p++;
	       }

 for (i=1;i<=m;i++) for (j=1;j<=n;j++) if (b[i][j]>1) b[i][j]=0;

 p=u=1;
 b[rx][ry]=1;
 cx2[u]=rx;
 cy2[u]=ry;
 while (p<=u) {x=cx2[p];
	       y=cy2[p];
	       for (i=1;i<=8;i++) {xnou=x+dx[i];
				   ynou=y+dy[i];
				   if (b[xnou][ynou]==0) {b[xnou][ynou]=b[x][y]+1;
							  cx2[++u]=xnou;
							  cy2[u]=ynou;
							  }
				   }
	       p++;
	       }


 for (i=1;i<=m;i++) for (j=1;j<=n;j++) if (a[i][j]!=-1&&a[i][j]==b[i][j]&&a[i][j]<min) {min=a[i][j];
											z=i;
											t=j;
											}
 fprintf (g, "%d %d %d\n", min, z, t);

 fclose(f);
 fclose(g);
 return 0;
}