Cod sursa(job #1344789)

Utilizator ade_tomiEnache Adelina ade_tomi Data 16 februarie 2015 23:12:21
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.54 kb
#include<stdio.h>
int linie[]={1,0,1,-1,-1,0,-1,1};
int coloana[] ={1,1,0,-1,0,-1,1,-1};
struct rj
{
	int l,c;
};
rj v[10002];
int a[103][103],b[103][103],i,j,lj,cj,lr,cr,n,m,ic,sf,min,max,pl,pj,p,lin,col;
char c,cg;
int main()
{
	freopen("rj.in","r",stdin);
	freopen("rj.out","w",stdout);
	scanf("%d%d%c",&n,&m,&cg);
	for(i=1;i<=n;i++)
	{
		for(j=1;j<=m;j++)
		{
			scanf("%c",&c);
			if(c=='X') 
				b[i][j]=a[i][j]=-1;
			if(c==' ')
				b[i][j]=a[i][j]=0;
			if(c=='J')
			{
				lj=i;
				cj=j;
				a[i][j]=1;
			}
			if(c=='R')
			{
				lr=i;
				cr=j;
				b[i][j]=1;
			}
		}
		scanf("%c",&cg);
	}
	for(i=0;i<=n+1;i++)
	{
		b[i][0]=a[i][0]=-1;
		b[i][m+1]=a[i][m+1]=-1;
	}
	for(i=0;i<=m+1;i++)
	{
		b[0][i]=a[0][i]=-1;
		b[n+1][i]=a[n+1][i]=-1;
	}
	ic=sf=1;
	v[1].l=lj;
	v[1].c=cj;
	while(ic<=sf)
	{
		for(i=0;i<8;i++)
		{
			lin=v[ic].l+linie[i];
			col=v[ic].c+coloana[i];
			if(a[lin][col]==0)
			{
				sf++;
				v[sf].l=lin;
				v[sf].c=col;
				a[lin][col]=a[v[ic].l][v[ic].c]+1;
			}
		}
		ic++;
	}
	ic=sf=1;
	v[1].l=lr;
	v[1].c=cr;
	while(ic<=sf)
	{
		for(i=0;i<8;i++)
		{
			lin=v[ic].l+linie[i];
			col=v[ic].c+coloana[i];
			if(b[lin][col]==0)
			{
				sf++;
				v[sf].l=lin;
				v[sf].c=col;
				b[lin][col]=b[v[ic].l][v[ic].c]+1;
			}
		}
		ic++;
	}
	p=100*100+100*100+1;
	for(i=1;i<=n;i++)
		for(j=1;j<=m;j++)
		{
			if(a[i][j]>0&&b[i][j]>0&&a[i][j]==b[i][j]&&a[i][j]<p)
			{
				pl=i;
				pj=j;
				p=a[i][j];
			}
		}
	printf("%d %d %d",p,pl,pj);
	return 0;
}