Cod sursa(job #547808)

Utilizator DanceKrissCristian Oancea DanceKriss Data 6 martie 2011 18:30:16
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.18 kb
#include<iostream>
#include<stdio.h>
#include<string.h>

using namespace std;

char  a[102][102];
int romeo[104][104],julieta[104][104]; 
int xr,yr,yj,xj,n,m;

void citire()
{
	char s[105];
 cin>>n>>m;
 for(int i=1;i<=n;i++)
 {
	cin.get();
	cin.get(s,105);
	for(int j=0;j<strlen(s);j++)
	{
	  if(s[j]=='X') a[i][j+1]='-';
	  if(s[j]==' ') a[i][j+1]='0';
	  if(s[j]=='R') { xr=i;yr=j+1; a[i][j+1]='R';}
	  if(s[j]=='J') { xj=i;yj=j+1; a[i][j+1]='J';}
	}
 }
}
 void init_rj()
 {
	int i,j;
	for(i=1;i<=n;i++)
	 for(j=1;j<=m;j++)
		{romeo[i][j]=-2;julieta[i][j]=-2;}
	 
	romeo[xr][yr]=1;julieta[xj][yj]=1;
 }	

 void bordare()
{
	int i,j;
	for(i=0;i<=n+1;i++)
	{
		romeo[i][0]=-1;julieta[i][0]=-1;
		romeo[i][m+1]=-1;julieta[i][m+1]=-1;
	  for(j=0;j<=m+1;j++)
	 {
		romeo[0][j]=-1;julieta[0][j]=-1;
		romeo[m+1][j]=-1;julieta[m+1][j]=-1;
	  }
	}
 }
void afis()
{
	int i,j;
	for(i=0;i<=n+1;i++)
	{
		cout<<"\n";
	 for(j=0;j<=m+1;j++)
		cout<<romeo[i][j];
	} 
	for(i=0;i<=n+1;i++)
	{
		cout<<"\n";
	 for(j=0;j<=m+1;j++)
		cout<<julieta[i][j];
	}
	for(i=1;i<=n;i++)
	{
		cout<<"\n";
	 for(j=1;j<=m;j++)
		cout<<a[i][j];
	}
}
void lee(int xp,int yp,int x[104][104])
{
	const int di[]={-1,-1,0,1,1,1,0,-1},dj[]={0,1,1,1,0,-1,-1,-1};
	struct coada { unsigned char ii,jj;} v[10800];
	int li,ls,xn,yn,xv,yv,i;
	v[0].ii=xp;v[0].jj=yp;
	li=ls=0;
	x[xp][yp]=1;
	while(li<=ls)
	{
		xv=v[li].ii;yv=v[li].jj;
		for(i=0;i<8;i++)
		{
		xn=xv+di[i];
		yn=yv+dj[i];
		if(a[xn][yn]=='0' && x[xn][yn]==-2)
		{
		x[xn][yn]=x[xv][yv]+1;
		v[++ls].ii=xn;v[ls].jj=yn;
		}
		}
	li++;
	}

}

void restu()
{
	//aflam pozitiile unde coincide romeo[i][j] cu julieta[i][j]
	//dar cu valoareA MINIMA!!!!
	int i,j,tmin=32000,imin,jmin;
	for(i=1;i<n;i++)
	 for(j=1;j<=m;j++)
     if(romeo[i][j]==julieta[i][j] && romeo[i][j]!=-2 && julieta[i][j]!=-2)
	 	if(romeo[i][j]<tmin) {tmin=romeo[i][j],imin=i;jmin=j;};
		
	cout<<tmin<<" "<<imin<<" "<<jmin<<"\n";
}	
int main()
{
	
	freopen("rj.in","r",stdin);
	freopen("rj.out","w",stdout);
	//bordare();
	citire();
	init_rj();
	lee(xr,yr,romeo);
	lee(xj,yj,julieta);
	//afis();
	restu();
	return 0;
 }