Cod sursa(job #430356)

Utilizator marian77ivan marian liviu marian77 Data 30 martie 2010 22:19:28
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.5 kb
#include <stdio.h>
#include <limits.h>
FILE *f=fopen("rj.in","r");
FILE *g=fopen("rj.out","w");
int n,m,l,cc,a[101][101],b[101][101],d[102][102],i,j,x,y,y1,y2,dx[8]={-1,-1,0,1,1,1,0,-1}, dy[8]={0,1,1,1,0,-1,-1,-1},x1,x2,c[2][10001],poz1,poz2,min;
char c1;
void coadar(int x,int y) {
	int p,u,i;
	p=u=1;
	c[0][1]=x;
	c[1][1]=y;
	a[x][y]=1;
	while(p<=u) {
		for(i=0;i<=7;i++) {
			l=c[0][p]+dx[i];
			cc=c[1][p]+dy[i];
			if(d[l][cc]==0&&a[l][cc]==0) {
				u++;
				c[0][u]=l;
				c[1][u]=cc;
				a[l][cc]=a[c[0][p]][c[1][p]]+1;
			}
		}
		p++;
	}
}
void coadaj(int x,int y) {
	int p,u,i;
	p=u=1;
	c[0][1]=x;
	c[1][1]=y;
	b[x][y]=1;
	while(p<=u) {
		for(i=0;i<=7;i++) {
			l=c[0][p]+dx[i];
			cc=c[1][p]+dy[i];
			if(b[l][cc]==0&&d[l][cc]==0) {
				u++;
				c[0][u]=l;
				c[1][u]=cc;
				b[l][cc]=b[c[0][p]][c[1][p]]+1;
			}
		}
		p++;
	}
}
int main() {
	min=INT_MAX;
	fscanf(f,"%d%d\n",&n,&m);
	for(i=1;i<=n;i++) {
		for(j=1;j<=m;j++) {
			fscanf(f,"%c",&c1);
			if(c1=='X')
				d[i][j]=1;
			else
				if(c1=='R') {
					x1=i;
					y1=j;
				}
				else
					if(c1=='J') {
						x2=i;
						y2=j;
					}
		}
		fscanf(f,"\n");
	}
	for(i=0;i<=n+1;i++)
		d[i][0]=d[i][m+1]=1;
	
	for(i=0;i<=m+1;i++)
		d[0][i]=d[n+1][i]=1;
	
	coadar(x1,y1);
	coadaj(x2,y2);
	for(i=1;i<=n;i++)
		for(j=1;j<=m;j++)
			if(a[i][j]==b[i][j]&&a[i][j]!=0)
				if(a[i][j]<min) {
					min=a[i][j];
					poz1=i;
					poz2=j;
				}
	fprintf(g,"%d %d %d",min,poz1,poz2);
	return 0;
}