Cod sursa(job #882093)

Utilizator Eby7Elena Obreja Eby7 Data 18 februarie 2013 21:27:24
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.82 kb
#include<fstream>
using namespace std;
ifstream f("rj.in");
ofstream g("rj.out");
int n,m;
int xr,xj,yr,yj;
int dx[8]={0,1,0,-1,-1,1,-1,1};
int dy[8]={1,0,-1,0,-1,1,1,-1};
struct coada
{
    int l,v;
};
coada q[10001];
char a[101][101];
int b[101][101],c[101][101];
int verif(int i,int j)
{
    return (i>n||j>m||i<1||j<1||a[i][j]=='X');
}
void citire()
{
    int i,j;
    char caracter;
    f>>n>>m;
    f.get(caracter);
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=m;j++)
        {
            f.get(caracter);
            a[i][j]=caracter;
            if(a[i][j]=='R')
            {
                xr=i;
                yr=j;
                a[i][j]=' ';
            }
            if(a[i][j]=='J')
            {
                xj=i;
                yr=j;
                a[i][j]=' ';
            }
        }
        f.get(caracter);
    }

}
/*void lee(int xi,int yi,int mat[101][101])
{
    int st,dr,i;
    int x,y,xx,yy;
    q[0].l=xi;
    q[0].v=yi;
    mat[xi][yi]=1;
    st=dr=0;
    while(st<=dr)
    {
      x=q[st].l;
      y=q[st].v;
      for(i=1;i<8;i++)
      {
          xx=x+dx[i];
          yy=y+dy[i];
          if(verif(xx,yy))
           continue;
          if(a[xx][yy]==' ')
          {
              mat[xx][yy]=mat[x][y]+1;
              q[++dr].l=xx;
              q[dr].v=yy;
          }
      }
      st++;
    }
}*/
void lee(int xi,int yi,int mat[101][101])
{
 int x=0,y=0,xx=0,yy=0,i,st=0,dr=0;
  q[0].l=xi;
  q[0].v=yi;
  mat[xi][yi]=1;
  st=dr=0;
   while(st<=dr)
    {
     x=q[st].l;
     y=q[st].v;
      for(i=0;i<8;i++)
       {
           xx=x+dx[i];
           yy=y+dy[i];
           if(verif(xx,yy))
               continue;
           if(a[xx][yy]==' ')
           {
               mat[xx][yy]=mat[x][y]+1;
               q[++dr].l=xx;
               q[dr].v=yy;
           }
       }
     st++;
    }
}
/*void lee(int x0, int y0, int d[101][101])
{
    coada p;
    int inc=0,sf=0,i,k;
    for(i=0;i<=n+1;i++)
	for (k=0;k<=m+1;k++)
	 d[i][k]=-1;
	 q[0].l=x0;
	 q[0].v=y0;
	 d[x0][y0]=1;
while (inc<=sf)
	{
	 p=q[inc++];
	 for(i=0;i<8;i++)
		if(a[p.l+dx[i]][p.v+dy[i]]==' ' && d[p.l+dx[i]][p.v+dy[i]]==-1)
			{
			    d[p.l+dx[i]][p.v+dy[i]]=1+d[p.l][p.v];
			    q[++sf].l=p.l+dx[i];
			    q[sf].v=p.v+dy[i];
			}
	}
}*/
void afisare(int mat[101][101])
{
    int timp;
    int x,y;
    int i,j;
    for(i=1;i<=n;i++)
     for(j=1;j<=m;j++)
      if(b[i][j]==c[i][j])
      {
          timp=b[i][j];
          x=i;
          y=j;
      }
    g<<timp<<" "<<x<<" "<<y;

}
int main()
{
    int i,j;
    citire();
    lee(xr,yr,b);
    lee(xj,yj,c);
    for(i=1;i<=n;i++)
     {
         for(j=1;j<=m;j++)
          g<<b[i][j]<<" ";
        g<<"\n";
     }
    afisare(c);
    return 0;
}