Cod sursa(job #84944)

Utilizator gabitzish1Gabriel Bitis gabitzish1 Data 18 septembrie 2007 19:42:07
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.62 kb
#include<fstream.h>
#include<stdio.h>
#include<limits.h>
#define Max 102
char oras[Max][Max];
int R[Max][Max], J[Max][Max], n, m;
int XR, YR, XJ, YJ;
int dx[8]={-1,-1,0,1,1,1,0,-1},
    dy[8]={0,1,1,1,0,-1,-1,-1};


void parcurgere(int X, int Y, int d[Max][Max])
{
   typedef struct
     {
	int x, y;
     } Coada;
   Coada C[Max*Max], Pct;
   int p, u, i, j, Xnou, Ynou;
   for (i=1; i<=n; i++)
     for (j=1; j<=m; j++)
       d[i][j]=-1;
   p=u=1;
   C[u].x=X;
   C[u].y=Y;;
   d[X][Y]=1;
   while (p<u)
     {
       Pct=C[p]; p++;
       for (i=0; i<8; i++)
	 {
	   Xnou=Pct.x+dx[i];
	   Ynou=Pct.y+dy[i];
	   if(d[Xnou][Ynou]==-1 && oras[Xnou][Ynou]==' ')
	     {
	       u++;
	       C[u].x=Xnou;
	       C[u].y=Ynou;
	       d[Xnou][Ynou]=d[Pct.x][Pct.y]+1;
	     }
	 }
     }
}

void afis()
{
  ofstream out("rj.out");
  int i, j, tmin=INT_MAX, X, Y;
  for (i=1; i<=n; i++)
    for (j=1; j<=m; j++)
      if (R[i][j]==J[i][j] && tmin>R[i][j])
	{
	  tmin=R[i][j];
	  X=i; Y=j;
	}
  out<<X<<" "<<Y<<" "<<tmin<<endl;
  out.close();
}

void citire()
{
  FILE *f=fopen("rj.in","r");
  fscanf(f,"%d%d",&n,&m);
  for (int i=0; i<=n+1; i++)
     oras[i][0]=oras[i][m+1]='X';
  for (int j=0; j<=m+1; j++)
     oras[0][j]=oras[n+1][j]='X';
  char ch;
  flushall();
  for (i=1; i<=n; i++)
   for (j=1; j<=m; j++)
     {
       fscanf(f,"%c",&ch);
       if (ch=='R') { XR=i; YR=j; oras[i][j]=' ';}
	 else if (ch=='J') {  XJ=i; YJ=j; oras[i][j]=' ' ;}
	   else oras[i][j]=ch;
     }
}

void main()
{
  citire();
  parcurgere(XR, YR, R);
  parcurgere(XJ, YJ, J);
  afis();
}