Cod sursa(job #462680)

Utilizator mihai995mihai995 mihai995 Data 12 iunie 2010 16:57:34
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.18 kb
#include <fstream>
using namespace std;

struct punct{int lin,col;};

int a[1<<7][1<<7],b[1<<7][1<<7],n,m;
char s[1<<7][1<<7];
punct coada[1<<21];

const int dl[]={-1,0,1,0};
const int dc[]={0,1,0,-1};

ifstream in("rj.in");
ofstream out("rj.out");

void lee(int v[][1<<7],punct x)
{
	memset(v,0,sizeof(int));
	int i,p=0,u=0;
	punct y;
	coada[++u]=x;
	while (p<u)
		for (i=0,x=coada[++p];i<4;i++)
		{
			y.lin=x.lin+dl[i];
			y.col=x.col+dc[i];
			if (!v[y.lin][y.col] && s[y.lin][y.col]==' ')
			{
				v[y.lin][y.col]=v[x.lin][x.col]+1;
				coada[++u]=y;
			}
		}
}

int main()
{
	int i,j,x,y;
	punct r,q;
	in>>n>>m>>ws;
	for (i=1;i<=n;i++)
		in.getline(s[i]+1,m+1);
	for (i=0;i<=n+1;i++)
		s[i][0]=s[i][m+1]='X';
	for (i=0;i<=m+1;i++)
		s[0][i]=s[n+1][i]='X';
	for (i=1;i<=n;i++)
		for (j=1;j<=m;j++)
		{
			if (s[i][j]=='R')
			{
				r.lin=i;
				r.col=j;
			}
			if (s[i][j]=='J')
			{
				q.lin=i;
				q.col=j;
			}
		}
	lee(a,r);
	lee(b,q);
	a[0][0]=100000;
	x=y=0;
	for (i=1;i<=n;i++)
		for (j=1;j<=m;j++)
			if (a[i][j]==b[i][j] && a[i][j]>a[x][y])
			{
				x=i;
				y=j;
			}
	out<<a[x][y]<<" "<<x<<" "<<y<<"\n";
	return 0;
}