Cod sursa(job #850298)

Utilizator superman_01Avramescu Cristian superman_01 Data 8 ianuarie 2013 12:04:45
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 3.17 kb
#include<cstdio>
#include<string.h>

using namespace std;
FILE *fin=fopen("rj.in", "r"), *fout=fopen("rj.out", "w");
int n,m,xr,yr,xj,yj,mj[105][105],mr[105][105];

void generare()
{
	int i,j;
	char c[105];
	  fscanf(fin, "%d%d", &n, &m);
    fscanf(fin, "%c", &c);
 
    for(i=1;i<=n;i++)
    {
        fgets(c, 105, fin);
 
        for(j=0;j<=m-1;j++)
            {
                if(c [j]=='R')
                {
                    mr[i][j+1]=mj[i][j+1]=1;
                    xr=i, yr=j+1;
 
                }
                else if(c[j]=='J')
                {
                    mr[i][j+1]=mj[i][j+1]=1;
                    xj=i, yj=j+1;
 
                }
                else if(c[j]=='X')
 
                    mr[i][j+1]=mj[i][j+1]=-1;
 
                else if(c[j]==' ')
                    mj[i][j+1]=mr[i][j+1]=0;
 
            }
    }
	
}
void afisare()
{
	
	int i,j;
	for(i=0;i<=n+1;i++)
	{
		for(j=0;j<=m+1;j++)
			fprintf(fout,"%d ",mj[i][j]);
			fprintf(fout,"\n");
}
	
}

void Lee_julieta()
{
	int i,j;
	int xnou,ynou,x,y,k=1;
	int dx[]={-1,0,0,1},dy[]={0,1,-1,0};
	int l[105],c[105];
	l[1]=xj;
	c[1]=yj;
	for(i=1;i<=k;i++)
	{
		x=l[1];
		y=c[1];
	
		for(j=0;j<=3;j++)
		{
			xnou=x+dx[j];
			ynou=y+dy[j];
			if(mj[xnou][ynou]==0)
			{	
				mj[xnou][ynou]=mj[x][y]+1;
				k++;
				l[k]=xnou;
				c[k]=ynou;
			
			}
			else
				if(mj[xnou][ynou]==1)
				
					break;
				
			
		}
		
	}
	
	
}

void Lee_romeo()
{
	int i,j;
	int xnou,ynou,x,y,k=1;
	int dx[]={-1,0,0,1},dy[]={0,1,-1,0};
	int l[105],c[105];
	l[1]=xr;
	c[1]=yr;
	for(i=1;i<=k;i++)
	{
		x=l[1];
		y=c[1];
	
		for(j=0;j<=3;j++)
		{
			xnou=x+dx[j];
			ynou=y+dy[j];
			if(mj[xnou][ynou]==-1)
			{	
				mr[xnou][ynou]=mj[x][y]+1;
				k++;
				l[k]=xnou;
				c[k]=ynou;
			
			}
			
		}
		
	}
	
	
}
void afisare_romeo()
{
	
	int i,j;
	for(i=1;i<=n;i++)
		{for(j=1;j<=m;j++)
		printf("%d ",mr[i][j]);
         printf("\n");	
		}
		printf("\n");
		
}
void afisare_julieta()
{
	
	int i,j;
	for(i=1;i<=n;i++)
		{
			for(j=1;j<=m;j++)
		printf("%d ",mj[i][j]);
		printf("\n");
	}
	printf("\n");
}

void comparare()

{
	int i,j,l,c,drum;
	
	
	drum=2000000;
	
	for(i=1;i<=n;i++)
		for(j=1;j<=m;j++)
			if(mj[i][j]==mr[i][j]&&mj[i][j]>0)
			{
	         
                   if(mj[i][j]<=drum)

				   { 
					   drum=mj[i][j];
					   l=i;
					   c=j;
				   }					   
			}
			
	
    fprintf(fout,"%d %d %d",drum, l, c);
	    
	fclose(stdout);	
	
}
void bordare()
{
    int i,j;
    for(i=0;i<=n+1;i++)
        {
            mj[i][0]=-1;
              
      mr[i][0]=-1;
              
            mr[i][m+1]=-1;
  
			mj[i][m+1]=-1;
        }
        for(j=0;j<=m+1;j++)
            {
               mj[0][j]=-1;
                mj[n+1][j]=-1;
				
               mr[0][j]=-1;
                mr[n+1][j]=-1;
                  
        }
        mj[0][0]=-1;
              mr[0][0]=-1;
      

	
}
int main()
{
	
	generare();
	bordare();
	afisare();
	Lee_romeo();
	Lee_julieta();
	afisare_romeo();
	afisare_julieta();
	
	comparare();
	return 0;
}