Cod sursa(job #344553)

Utilizator Ionescu_MariaIonescu Maria-Dorina Ionescu_Maria Data 30 august 2009 15:44:33
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.38 kb
#include<fstream.h>
#define nmax 105
int a[nmax][nmax],b[nmax][nmax],n,m,tmin,xmin,ymin,rx,ry,jx,jy,x[10002],y[10002];
int dl[8]={0,0,1,-1,1,1,-1,-1};
int dc[8]={1,-1,0,0,1,-1,1,-1};
void cit()
{
	ifstream fin("rj.in");
	char c;
	fin>>n>>m;
	fin.get();
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=m;j++)
		{
			c=fin.get();
			if(c=='R')
			{
				rx=i; ry=j;
			}
			else
				if(c=='J')
				{
					jx=i; jy=j;
				}
				else
					if(c=='X')
						a[i][j]=-1;
		}
		fin.get();
	}
	fin.close();
}
void bordare()
{
	int i;
	for(i=0;i<=n+1;i++)
		a[i][0]=a[i][m+1]=-1;
	for(i=1;i<=m;i++)
		a[0][i]=a[n+1][i]=-1;
}
void lee(int a[nmax][nmax],int inci,int incj)
{
	int p,u,ii,jj,i,j,dd,k;
	p=u=1; x[p]=inci; y[p]=incj; a[inci][incj]=1;
	while(p<=u)
	{
		i=x[p]; j=y[p]; dd=a[i][j]+1;
		for(k=0;k<8;k++)
		{
			ii=i+dl[k]; jj=j+dc[k];
			if(a[ii][jj]==0)
			{
				u++; x[u]=ii; y[u]=jj; a[ii][jj]=dd;
			}
		}
		p++;
	}
}
void afis()
{
	ofstream fout("rj.out");
	fout<<tmin<<" "<<xmin<<" "<<ymin<<'\n';
	fout.close();
}
int main()
{
	int i,j;
	cit();
	bordare();
	for(i=0;i<=n+1;i++)
		for(j=0;j<=m+1;j++)
			b[i][j]=a[i][j];
	lee(a,rx,ry);
	lee(b,jx,jy);
	tmin=10002;
	for(i=1;i<=n;i++)
		for(j=1;j<=m;j++)
			if(a[i][j]==b[i][j]&&a[i][j]<tmin&&a[i][j]>0)
			{
				tmin=a[i][j];
				xmin=i;
				ymin=j;
			}
	afis();
	return 0;
}