Cod sursa(job #774866)

Utilizator costin7856Antonesi Florean Costin costin7856 Data 6 august 2012 16:25:07
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.22 kb
#include<fstream>
using namespace std;
char x;
int n,i,j,m,J[103][103],r[103][103],xi,yi,minim;
int dx[]={-1,-1,0,1,1,1,0,-1};
int dy[]={0,1,1,1,0,-1,-1,-1};
ifstream f("rj.in");
ofstream g("rj.out");
void citire()
{
	f>>n>>m;
	f.get(x);
	for(i=1;i<=n;i++)
	{
		for(j=1;j<=m;j++)
		{
			f.get(x);
			if(x=='X')
			{
				J[i][j]=-1;
				r[i][j]=-1;
			}
			
			else
				if(x=='R')
				{
					J[i][j]=0;
					r[i][j]=10000;

				}
				else
					if(x=='J')
					{
						J[i][j]=10000;
						r[i][j]=0;
					}
				else
					if(x==' ')
					{
						J[i][j]=10000;
						r[i][j]=10000;
					}
			
		}
		f.get(x);
	}
}
void lee(int c[103][103])
{
	int x,y,xx,yy,i,ok=1;
	while(ok)
	{
		ok=0;
		for(x=1;x<=n;x++)
			for(y=1;y<=m;y++)
			{
				if(c[x][y]==10000||c[x][y]==-1)
					continue;
				
				for(i=0;i<8;i++)
				{
					xx=x+dx[i];
					yy=y+dy[i];
					if(c[xx][yy]>c[x][y]+1)
					{
						c[xx][yy]=c[x][y]+1;
						ok=1;
					}
					
						
							
				}
			}
	}
}

void afisare()
{
	minim=10000;
	for(i=1;i<=n;i++)
	{
		for(j=1;j<=m;j++)
			if(r[i][j]==J[i][j]&&r[i][j]!=-1&&r[i][j]!=10000&&r[i][j]+1<minim)
			{
				minim=r[i][j]+1;
				xi=i;
				yi=j;
			}
	}
	g<<minim<<" "<<xi<<" "<<yi;

}
int main()
{
	citire();
	lee(r);
	lee(J);
	afisare();
}