Cod sursa(job #411957)

Utilizator taseTanase Alexandru tase Data 5 martie 2010 11:41:12
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.15 kb
#include<stdio.h>
int n,m;
struct nod
{
	int l,c;
};
void bfs(int sl,int sc, int v[105][105])
{
	int dl[]={-1,-1,0,1,1,1,0,-1};
	int dc[]={0,1,1,1,0,-1,-1,-1};
	int p=0,i,u=0;
	nod coada[10005],x,y;
	coada[u].l=sl;
	coada[u++].c=sc;
	x=coada[p];
	while(p<=u)
	{
		for(i=0;i<8;++i)
		{
			y.l=x.l+dl[i];
			y.c=x.c+dc[i];
			if(y.l>=1&&y.l<=n&&y.c>=1&&y.c<=m&&v[y.l][y.c]==0)
			{
				{
					coada[u++]=y;
					v[y.l][y.c]=v[x.l][x.c]+1;
				}
			}
		}
		x=coada[++p];
	}
}
int main()
{
	freopen("rj.in","r",stdin);
	freopen("rj.out","w",stdout);
	int a[105][105]={0},b[105][105]={0},i,j,xf,yf,min=10005;
	char s[105];
	nod sr,sj;
	scanf("%d%d\n",&n,&m);
	for(i=1;i<=n;++i)
	{
		//scanf("%c",&c);
		gets(s+1);
		for(j=1;j<=m;++j)
		{
			//scanf("%c",&c);
			if(s[j]=='X') a[i][j]=b[i][j]=-1;
			if(s[j]=='R') {a[i][j]=b[i][j]=1;sr.l=i;sr.c=j;}
			if(s[j]=='J') {a[i][j]=b[i][j]=1;sj.l=i;sj.c=j;}
			if(s[j]==' ') a[i][j]=b[i][j]=0;
		}
	}
	
	bfs(sr.l,sr.c,a);
	bfs(sj.l,sj.c,b);
	
	
	for(i=1;i<=n;++i)
		for(j=1;j<=m;++j)
			if(a[i][j]==b[i][j]&&a[i][j]<min&&a[i][j]>1) 
			{
				min=a[i][j];
				xf=i;
				yf=j;
			}
	printf("%d %d %d",min,xf,yf);
	return 0;
}