Cod sursa(job #548641)

Utilizator raduiris94Alexa Radu raduiris94 Data 7 martie 2011 17:50:16
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.49 kb
#include<fstream>
#define DN 102
using namespace std;
ifstream f("rj.in");
ofstream g("rj.out");
int n, m, xr, yr, xj, yj, x[8]={0, 1, 0, -1, -1, 1, -1, 1}, y[8]={1, 0, -1, 0, -1, 1,  1,-1}, r[DN][DN];
char drum[DN][DN];
struct Romeo
{
	int c1, c2;
} 
C[DN*DN], p;
void parcurge (int x0, int y0, int a[DN][DN])
{
	int inc=0, sf=0, i, k;
	for (i=0; i<=n+1; i++)
		for (k=0; k<=m+1; k++) 
			a[i][k]=-1;
	C[0].c1=x0; C[0].c2=y0; a[x0][y0]=1;
	while (inc<=sf)
	{
		p=C[inc++];
		for (i=0; i<8; i++)
			if (drum[p.c1+x[i]][p.c2+y[i]]==' ' && a[p.c1+x[i]][p.c2+y[i]]==-1)
			{
				a[p.c1+x[i]][p.c2+y[i]]=1+a[p.c1][p.c2];
				C[++sf].c1=p.c1+x[i];
				C[sf].c2=p.c2+y[i];
			}
	}
}
int main()
{
	int j[DN][DN];
	//citire
	int i, k, tmin=DN*DN+5, xmin=-1, ymin=-1;
	char c;
	f>>n>>m;
	for (i=0; i<=n+1; i++) 
		drum[i][0]=drum[i][m+1]='X';
	for (i=0; i<=m+1; i++) 
		drum[0][i]=drum[n+1][i]='X';
	f.get(c);
	for (i=1; i<=n; i++)
	{
		for (k=1; k<=m; k++)
		{
			f.get(c); drum[i][k]=c;
			if (drum[i][k]=='R') 
			{
				xr=i; 
				yr=k; 
				drum[i][k]=' ';
			}
			if (drum[i][k]=='J') 
			{
				xj=i; 
				yj=k; 
				drum[i][k]=' ';
			}
		}
		f.get(c);
	}
	//parcurgere
	parcurge(xr, yr, r);
	parcurge(xj, yj, j);
	//afisare
	for (i=1; i<=n; i++)
		for (k=1; k<=m; k++)
			if (r[i][k]==j[i][k])
				if (r[i][k]<tmin && r[i][k]!=-1)
				{
					tmin=r[i][k]; xmin=i; ymin=k;
				}
	g<<tmin<<' '<<xmin<<' '<<ymin<<"\n";
	f.close();
	g.close();
	return 0;
}