Cod sursa(job #432513)

Utilizator soare_cristian16Cristy93 soare_cristian16 Data 2 aprilie 2010 14:32:18
Problema Rj Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.28 kb
#include<iostream>
#include<fstream>
using namespace std;
ifstream f("rj.in");
ofstream g("rj.out");
const int dab[8]={0,1,1,1,0,-1,-1,-1};
const int dor[8]={1,1,0,-1,-1,-1,0,1};
struct bfs
{
	int absc,ordon;
}t[10001],x,y;
char v[100][100];
int ro[100][100],ju[100][100],n,m,minim=10001,absc,ordon,a1,b1,a2,b2;
void lee(int absc, int ordon, int c[100][100])
{
	int a=1,b=1,i;
	t[1].absc=absc;
	t[1].ordon=ordon;
	while(a<=b)
	{
		x=t[a++];
		for(i=0;i<8;i++)
		{
			y.absc=x.absc+dab[i];
			y.ordon=x.ordon+dor[i];
			if(v[y.absc][y.ordon]==' '&&(c[y.absc][y.ordon]==0||(c[y.absc][y.ordon]>0&&c[y.absc][y.ordon]>c[x.absc][x.ordon]+1)))
			{
				t[++b]=y;
				c[y.absc][y.ordon]=c[x.absc][x.ordon]+1;
			}
		}
	}
}
int main()
{
	int i,j;
	f>>n>>m;
	f.getline(v[0],100);
	for(i=0;i<n;i++)
	{
		f.getline(v[i],100);
		for(j=0;j<m;j++)
		{
			if(v[i][j]=='R')
			{
				ro[i][j]=1;
				a1=i;
				b1=j;
			}
			else
			if(v[i][j]=='J')
			{
				ju[i][j]=1;
				a2=i;
				b2=j;
			}
		}
	}
	lee(a1,b1,ro);
	lee(a2,b2,ju);
	for(i=0;i<n;i++)
	{
		for(j=0;j<m;j++)
		{
			if(v[i][j]==' '&&ro[i][j]==ju[i][j]&&ro[i][j]&&minim>ro[i][j])
			{
				minim=ro[i][j];
				absc=i;
				ordon=j;
			}
		}
	}
	g<<minim<<" "<<absc+1<<" "<<ordon+1;
	return 0;
}