Cod sursa(job #88046)

Utilizator c_sebiSebastian Crisan c_sebi Data 29 septembrie 2007 23:33:31
Problema Rj Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.17 kb
#include <fstream.h>

int nl, nc, a[102][102], b[102][102], ij, jj, ir, jr, min=30000;


void drum (int a[][102], int i0, int j0)
{

	struct Coada {	int l, c, d;} C[5050], u, v;
	int di[]={-1, -1, 0, 1, 1, 1, 0, -1}, dj[]={0, -1, -1, -1, 0, 1, 1, 1};
	int SfC=0, IncC=0, k;
	C[SfC].l=i0; C[SfC].c=j0; C[SfC].d=a[i0][j0];
	while (IncC <= SfC)
		{
			u=C[IncC++];
			for (k=0; k<8; k++)
				{
					v.l=u.l+di[k]; v.c=u.c+dj[k];
					if (a[v.l][v.c]==-1)
						{
							v.d=u.d+1;
							a[v.l][v.c]=v.d;
							C[++SfC]=v;
						}
				}
		}
}

int main()
{
	char s[110];
	int i, j;
	ifstream f("rj.in");
	f>>nl>>nc;
	f.get();
	for (i=1; i<=nl; i++)
		{
			f.getline (s+1, 105);
			for(j=1; j<=nc; j++)
				if (s[j]==' ') a[i][j]=b[i][j]=-1;
				else if (s[j]=='J') { a[i][j]=1; b[i][j]=0; ij=i; jj=j; }
				else if (s[j]=='R') { a[i][j]=0; b[i][j]=1; ir=i; jr=j; }
		}
	f.close();
	drum (a, ij, jj);
	drum (b, ir, jr);
	for (i=1; i<=nl; i++)
		for (j=1; j<=nc; j++)
			if (a[i][j] && a[i][j]!=-1 && a[i][j]==b[i][j] && a[i][j]<min)
				{min=a[i][j]; ir=i; jr=j; }
	ofstream g("rj.out");
	g<<min<<" "<<ir<<" "<<jr<<"\n";
	g.close();
	return 0;
}