Cod sursa(job #351319)

Utilizator aladinaladin aladinn aladin Data 27 septembrie 2009 17:37:15
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.34 kb
#include <cstdio>
#include <cstring>
#define N 105

int main()
{int blax[9]={-1,-1,0,1,1,1,0,-1},blay[9]={0,1,1,1,0,-1,-1,-1},q,ok,linie=N,coloana=N,str,stpr,stj,stpj,s[N][N],x[N*N*N],y[N*N*N],n,m,i,j,xr,yr,xj,yj;
 char c;
 
 
 
 freopen("rj.in","r",stdin);
 freopen("rj.out","w",stdout);
 scanf("%d %d\n",&n,&m);
 for (i=1;i<=n;++i)
	{ for (j=1;j<=n;++j)
		{ scanf("%c",&c);
	      if (c=='X') s[i][j]=1; else s[i][j]=0;
	      if (c=='R') xr=i,yr=j; else
			  if (c=='J') xj=i,yj=j; 
		}
	 scanf("\n");
	s[i][0]=s[i][m+1]=1; 
	}	 
 for (j=1;j<=m;++j) s[0][j]=s[n+1][j]=1;	
 s[0][0]=s[0][m+1]=s[n+1][0]=s[n+1][m+1]=1;
 str=stpr=1;stj=stpj=2;
 x[1]=xr;x[2]=xj;
 y[1]=yr;y[2]=yj;
 for (i=ok=1;ok;i++)
 {int a=str,b=stpr;
  str=stpj+1,stpr=stpj;
  for (j=a;j<=b;j++) 
  	  for (q=0;q<=7;++q)
		if (s[x[j]+blax[q]][y[j]+blay[q]]==0) {stpr++;x[stpr]=x[j]+blax[q];y[stpr]=y[j]+blay[q];}  
  
		
  a=stj,b=stpj;
  stj=stpr+1,stpj=stpr;
  for (j=a;j<=b;j++) 
  	  for (q=0;q<=7;++q)
		if (s[x[j]+blax[q]][y[j]+blay[q]]==0) {stpj++;x[stpj]=x[j]+blax[q];y[stpj]=y[j]+blay[q];}  
  
   for (j=str;j<=stpr;++j)
     for (q=stj;q<=stpj;++q)
		if ((x[j]==x[q])&&(y[j]==y[q]))
		{ok=0;
		 if ((x[j]<linie)||(y[j]<coloana))
		 linie=x[j],coloana=y[j];
		}
		
 }
 printf("%d %d %d",i,linie,coloana); 
			
 		
		return 0;}