Cod sursa(job #649388)

Utilizator BabutaRaresBabuta Rares Mihai BabutaRares Data 15 decembrie 2011 22:41:23
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.46 kb
#include<stdio.h>
typedef struct{int x,y;}PERECHE;
int a[102][102],v[102][102];
int main()
{
	FILE *f=fopen("rj.in","r");
	FILE *g=fopen("rj.out","w");
	int u1=0,p1=1,ok,dx[]={-1,-1,-1,0,0,1,1,1},dy[]={-1,0,1,-1,1,-1,0,1},n,m,min=2100000000,x,xv,yv,i,j,p=1,u=0,y,b;
	char s;
	PERECHE c[100001],d[100001];
	fscanf(f,"%d",&n);fscanf(f,"%d",&m);
	for(i=1;i<=n;i++)
	{
		fscanf(f,"%c",&s);
		for(j=1;j<=m;j++)
		{
			
			fscanf(f,"%c",&s);
			if(s=='R')
			{
				a[i][j]=1;
				v[i][j]=-1;
				c[++u].x=i;c[u].y=j;
			}
			if(s=='J')
			{
				a[i][j]=-2;
				v[i][j]=1;
				d[++u1].x=i;d[u1].y=j;
			}
			
			if(s==' ')
				a[i][j]=v[i][j]=0;
			if(s=='X')
				a[i][j]=v[i][j]=-1;			
		}
	}
	while(p<=u)
	{
		x=c[p].x;y=c[p++].y;
		for(i=0;i<=7;i++)
		{
			xv=x+dx[i];
			yv=y+dy[i];
			if(a[xv][yv]==0&&xv!=0&&xv!=n+1&&yv!=0&&yv!=m+1)
			{
				a[xv][yv]=a[x][y]+1;
				c[++u].x=xv;c[u].y=yv;				
			}
		}
	}
	a[d[u].x][d[u].y]=1;
	while(p1<=u1)
	{
		x=d[p1].x;y=d[p1++].y;
		for(i=0;i<=7;i++)
		{
			xv=x+dx[i];
			yv=y+dy[i];
			if(v[xv][yv]==0&&xv!=0&&xv!=n+1&&yv!=0&&yv!=m+1)
			{
				v[xv][yv]=v[x][y]+1;
				d[++u1].x=xv;d[u1].y=yv;				
			}
		}
	}	
	for(i=1;i<=n;i++)
	{
		for(j=1;j<=m;j++)
		{
			if(a[i][j]>1&&a[i][j]==v[i][j])
			{
				fprintf(g,"%d",a[i][j]);
				fprintf(g," ");
				fprintf(g,"%d",i);
				fprintf(g," ");
				fprintf(g,"%d",j);
				ok=1;
				break;
			}
		}
		if(ok==1)
			break;
	}	
}