Cod sursa(job #145787)

Utilizator pegumihai pegulescu pegu Data 29 februarie 2008 14:56:43
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.76 kb
#include<fstream.h>
#define nmax 102
#define dimmax 10625

ifstream f("rj.in");
ofstream g("rj.out");

typedef struct{int c,l;}element;
int a[nmax][nmax],b[nmax][nmax],n,m,min;
int col[9]={0,0,1,0,-1,-1,1,-1,1};
int lin[9]={0,1,0,-1,0,-1,1,1,-1};
element rom,jul,q;



void citire(){
int i,j;
char c[100];
f>>n>>m;
f.get();
for(i=1;i<=n;i++)
{    f.getline(c,100);     
     for(j=1;j<=m;j++)
       {
	if(c[j-1]==' '){a[i][j]=-1;b[i][j]=-1;}
	else
	  if(c[j-1]=='X'){a[i][j]=-2;b[i][j]=-2;}
          else
	     if(c[j-1]=='R'){rom.c=j; rom.l=i;a[i][j]=1;b[i][j]=-1;}
         	else
		  if(c[j-1]=='J'){jul.l=i; jul.c=j;b[i][j]=1;a[i][j]=-1;}
           
        }
}

}



void bordare(){
int i;
for(i=1;i<=n;i++)
{a[i][m+1]=-2;
a[i][0]=-2;
b[i][m+1]=-2;
b[i][0]=-2;
}	 
 for(i=1;i<=m;i++)
 {a[0][i]=-2;
 a[n+1][i]=-2;
 b[0][i]=-2;
 b[n+1][i]=-2;
 }}

int lee(){
int csf1=0,csf2=0,cinc1=0,cinc2=0,k;
element x1,x2,y1,y2;
element c1[dimmax],c2[dimmax];
c1[csf1]=rom;
c2[csf2]=jul;
while(csf1>=cinc1&&a[jul.l][jul.c]==-1)
{   x1=c1[cinc1++];
    
    for(k=1;k<9;k++)
    {   y1.c=x1.c+col[k];
	y1.l=x1.l+lin[k];


	
	if(a[y1.l][y1.c]==-1){c1[++csf1]=y1; a[y1.l][y1.c]=a[x1.l][x1.c]+1; }
	


     }


}



while(csf2>=cinc2&&b[rom.l][rom.c]==-1)
{  
    x2=c2[cinc2++];
    for(k=1;k<9;k++)
    {   
	y2.c=x2.c+col[k];
	y2.l=x2.l+lin[k];
	if(b[y2.l][y2.c]==-1){c2[++csf2]=y2;  b[y2.l][y2.c]=b[x2.l][x2.c]+1; }


     }


}
  return 0;}
void minim(){
int i,j;  min=-1;
for(i=1;i<=n;i++)
  for(j=0;j<=m;j++)
   if(a[i][j]==b[i][j]&&a[i][j]>0)
     if(a[i][j]<min||min<=0){min=a[i][j];q.l=i;q.c=j;}

}

 int main(){
 citire();
 bordare();
 lee();
 minim();
g<<min<<" "<<q.l<<" "<<q.c;

 return 0;}