Cod sursa(job #102775)

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

typedef struct { int l,cl;} COADA;
COADA x1,x2;

void creare ()
  { int i,j; char c2,ch[102];
    FILE*f=fopen("rj.in","r");
    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.cl=j+1;break;
	   case 'J': a1[i][j+1]=a2[i][j+1]=1;x2.l=i;x2.cl=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;  }
   fclose(f);}


void BF (int x,int y,int a[][102])
{ int t[3]={0,1,-1},i,p,u;COADA c[5000],x2;
  u=p=1;c[u].l=x;c[u].cl=y;
  while (p<=u)
    { x2=c[p++];
      for (i=1;i<=2;i++)
      { if(a[x2.l][x2.cl+t[i]]==0)
	  { a[x2.l][x2.cl+t[i]]=a[x2.l][x2.cl]+1;
	    c[++u].l=x2.l;
	    c[u].cl=x2.cl+t[i];}
	if (a[x2.l+t[i]][x2.cl]==0)
	  { a[x2.l+t[i]][x2.cl]=a[x2.l][x2.cl]+1;
	    c[++u].l=x2.l+t[i];
	    c[u].cl=x2.cl;}
	if (a[x2.l-t[i]][x2.cl+t[i]]==0)
	  { a[x2.l-t[i]][x2.cl+t[i]]=a[x2.l][x2.cl]+1;
	    c[++u].l=x2.l-t[i];
	    c[u].cl=x2.cl+t[i];}
	if (a[x2.l+t[i]][x2.cl+t[i]]==0)
	  { a[x2.l+t[i]][x2.cl+t[i]]=a[x2.l][x2.cl]+1;
	    c[++u].l=x2.l+t[i];
	    c[u].cl=x2.cl+t[i];}}
     }}


void afisare (int a[][102],int b[][102])
 { int min=3600,i,j;
   FILE*g=fopen("rj.out","w");
   for (i=1;i<=n;i++)
    for (j=1;j<=m;j++)
	if(a[i][j]==b[i][j] && min>a1[i][j] && a[i][j]!=-1 && a[i][j]!=1 && a[i][j]!=0)
	  { min=a[i][j];
	    x=i;
	    y=j;
	    }
  fprintf(g,"%d %d %d\n",min,x,y);
  fclose(g);
  }

int main()
{
  creare();
  BF(x1.l,x1.cl,a1);
  BF(x2.l,x2.cl,a2);
  afisare(a1,a2);
  return 0;
  }