Cod sursa(job #236096)

Utilizator Bogdan_tmmTirca Bogdan Bogdan_tmm Data 26 decembrie 2008 20:05:22
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.26 kb
#include<iostream>
#include<stdio.h>
FILE *f=fopen("rj.in","r"),*g=fopen("rj.out","w");
int n,m,rx,ry,jx,jy;
unsigned int r[102][102],ju[102][102];
char a[102][102];
void bordare(int n,int m)
{
	n++;m++;
	for(int i=0;i<=n;i++)
		a[i][0]=a[i][m]='X';
	for(int j=0;j<=m;j++)
		a[0][j]=a[n][j]='X';
}
void read()
{
	fscanf(f,"%d %d\n",&n,&m);
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		{
			fscanf(f,"%c",&a[i][j]);
			if(a[i][j]=='R')
			{
				rx=i;
				ry=j;
				a[i][j]=' ';
			}
			if(a[i][j]=='J')
			{
				jx=i;
				jy=j;
				a[i][j]=' ';
			}
		}
		fscanf(f,"\n");
	}
}
void lee(int x,int y,unsigned int l[102][102])
{
	int cx[10001],cy[10001],in,sf,dx[]={1,1,1,-1,-1,-1,0,0,},dy[]={1,-1,0,1,-1,0,1,-1};
	in=sf=1;
	l[x][y]=1;
	cx[1]=x;
        cy[1]=y;
	while(in<=sf)
	{
		for(int k=0;k<8;k++)
		{
			x=cx[in]+dx[k];
			y=cy[in]+dy[k];
			if(a[x][y]==' '&&!l[x][y])
			{
				l[x][y]=l[cx[in]][cy[in]]+1;
				sf++;
				cx[sf]=x;
				cy[sf]=y;
			}
		}
		in++;
	}
}
int main()
{
	read();
	bordare(n,m);
	lee(rx,ry,r);
	lee(jx,jy,ju);
	for(int i=1;i<=n;i++)
	       for(int j=1;j<=m;j++)   
			if(r[i][j]==ju[i][j]&&r[i][j])
			{
				fprintf(g,"%d %d %d\n",r[i][j],i,j);
				return 0;
			}
        return 0;
}