Cod sursa(job #189718)

Utilizator jupanubv92Popescu Marius jupanubv92 Data 17 mai 2008 17:41:51
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.66 kb
#include<stdio.h>

const int dx[]={-1,1,0,1, 0,-1,-1, 1},
          dy[]={-1,1,1,0,-1, 0, 1,-1};

struct {int r;int j;} a[101][101];
int n,i,j,m,xr,yr,min=10000,pf,pi,_i,_j,xj,yj;


void citire()
{char s[101];
 scanf("%d %d",&n,&m);
 char c=fgetc(stdin);
 for(i=1;i<=n;i++)
   {gets(s+1);
    for(j=1;j<=m;j++)
       {
	if(s[j]==' ') a[i][j].r,a[i][j].j=0;
	 else if(s[j]=='X') a[i][j].r,a[i][j].j=1;
		else if(s[j]=='R') {xr=i;
				 yr=j;
				 }
			else {xj=i;yj=j;}
       }


   }
                         
}

void aflur()
{
 int x[10001],y[10001],li,lf;
 li=1;
 x[1]=xr;    a[xj][yj].r=1;
 y[1]=yr;lf=1;
 for(li=1;li<=lf;li++)
   {i=x[li];
    j=y[li];
    for(int k=0;k<8;k++)
      {
       _i=i+dx[k];
       _j=j+dy[k];

       if(a[_i][_j].r) continue;
	if(_i<1||i>n) continue;
       if(_j<1||j>m) continue;
       lf++;
       x[lf]=_i;
       y[lf]=_j;
       a[_i][_j].r=a[i][j].r+1;
       }
   }
}

void afluj()
{
 int x[10001],y[10001],li,lf;
 li=1;lf=1;
 x[1]=xj;
 y[1]=yj;a[xr][yr].j=1;
 for(li=1;li<=lf;li++)
   {i=x[li];
    j=y[li];
    for(int k=0;k<8;k++)
     {
      _i=i+dx[k];
      _j=j+dy[k];
      if(a[_i][_j].j) continue;
      if(_i<1||i>n) continue;
      if(_j<1||j>m) continue;
      lf++;
      x[lf]=_i;
      y[lf]=_j;
      a[_i][_j].j=a[i][j].j+1;
      if(a[_i][_j].j==a[_i][_j].r)
	if(a[_i][_j].r<min) {min=a[_i][_j].r;
			   pf=_i;
			   pi=_j;
			   }
      }
   }
printf("%d %d %d",min+1,pf,pi);


}

void solve()
{
 aflur();
 afluj();
}

int main()
{
  freopen("rj.in","r",stdin);
  freopen("rj.out","w",stdout);
  citire();
  solve();
  return 0;
}