Cod sursa(job #100809)

Utilizator CosminStirbuStirbu Cosmin CosminStirbu Data 12 noiembrie 2007 19:11:42
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.27 kb
#include<stdio.h>
int a1[102][102],a2[102][102],i,j,n,m,u,p,u1,p1,ok,tmin,x,y;

int main()
{
  typedef struct { int l,c;} COADA;
  COADA cd1[10000],cd2[10000],x1,x2;
  char ch[100],c2; int t[3];
  t[1]=1,t[2]=-1;
  FILE*f=fopen("rj.in","r");
  FILE*g=fopen("rj.out","w");
  fscanf(f,"%d%d%c",&n,&m,&c2);
  for (i=1;i<=n;i++)
   {fgets (ch,m+2,f);
    for(j=0;j<m;j++)
       switch(ch[j])
	 { case 'X': a1[i][j+1]=a2[i][j+1]=-1;break;
	   case 'R': a1[i][j+1]=a2[i][j+1]=1;x1.l=i;x1.c=j+1;break;
	   case 'J': a1[i][j+1]=a2[i][j+1]=1;x2.l=i;x2.c=j+1;break;
	   default: break; }}
 for (i=1;i<=n;i++)
    {a1[i][0]=a1[i][m+1]=a1[0][0]=a1[n+1][0]=-1;
     a2[i][0]=a2[i][m+1]=a2[0][0]=a2[n+1][0]=-1;}
  for (i=1;i<=m+1;i++)
   { a1[0][i]=a1[n+1][i]=-1;
     a2[0][i]=a2[n+1][i]=-1;  }
  u1=p1=u=p=1;cd1[p]=x1;cd2[p1]=x2;
  ok=0;
  while (p<=u && p1<=u1)
   { x1=cd1[p++]; x2=cd2[p1++];
     for (i=1;i<=2;i++)
	{if(a1[x1.l][x1.c+t[i]]==0)
          { a1[x1.l][x1.c+t[i]]=a1[x1.l][x1.c]+1;
	    cd1[++u].l=x1.l;
	    cd1[u].c=x1.c+t[i];}
	if(a2[x2.l][x2.c+t[i]]==0)
	  { a2[x2.l][x2.c+t[i]]=a2[x2.l][x2.c]+1;
	    cd2[++u1].l=x2.l;
	    cd2[u1].c=x2.c+t[i];}
	if(a1[x1.l+t[i]][x1.c]==0)
          { a1[x1.l+t[i]][x1.c]=a1[x1.l][x1.c]+1;
	    cd1[++u].l=x1.l+t[i];
	    cd1[u].c=x1.c;}
	if(a2[x2.l+t[i]][x2.c]==0)
	  { a2[x2.l+t[i]][x2.c]=a2[x2.l][x2.c]+1;
	    cd2[++u1].l=x2.l+t[i];
	    cd2[u1].c=x2.c;}
	if(a1[x1.l+t[i]][x1.c+t[i]]==0)
          { a1[x1.l+t[i]][x1.c+t[i]]=a1[x1.l][x1.c]+1;
	    cd1[++u].l=x1.l+t[i];
	    cd1[u].c=x1.c+t[i];}
	if(a2[x2.l+t[i]][x2.c+t[i]]==0)
	  { a2[x2.l+t[i]][x2.c+t[i]]=a2[x2.l][x2.c]+1;
	    cd2[++u1].l=x2.l+t[i];
	    cd2[u1].c=x2.c+t[i];}
	if(a1[x1.l+t[i]][x1.c-t[i]]==0)
          { a1[x1.l+t[i]][x1.c-t[i]]=a1[x1.l][x1.c]+1;
	    cd1[++u].l=x1.l+t[i];
	    cd1[u].c=x1.c-t[i];}
	if(a2[x2.l+t[i]][x2.c-t[i]]==0)
	  { a2[x2.l+t[i]][x2.c-t[i]]=a2[x2.l][x2.c]+1;
	    cd2[++u1].l=x2.l+t[i];
	    cd2[u1].c=x2.c-t[i];}}







   }
 tmin=11000;
 for (i=1;i<=n;i++)
   for (j=1;j<=m;j++)
      if(a1[i][j]==a2[i][j] && tmin>a1[i][j] && a1[i][j]!=-1 && a1[i][j]!=1 && a1[i][j]!=0)
	  { tmin=a1[i][j];
	    x=i;
	    y=j;}
 fprintf(g,"%d %d %d",tmin,x,y);
 fclose(f);fclose(g);
 return 0;}