Cod sursa(job #847710)

Utilizator gbi250Gabriela Moldovan gbi250 Data 4 ianuarie 2013 13:29:24
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.67 kb
#include <iostream>
#include <cstdio>
#include <cstring>

FILE *fin=fopen("rj.in", "r"), *fout=fopen("rj.out", "w");
using namespace std;
char ch[105];
int sw, n, m, ar[500][105], aj[500][105], i, j, linR, colR, linJ, colJ;
int in, sf, dl[8]={-1, -1, 0, 1, 1, 1, 0, -1}, dc[8]={0, 1, 1, 1, 0, -1, -1, -1};
int mini, lin, col;


struct deplas{
	int l, c;
	int d;
}c[36000], x, y;

int main()
{
	fscanf(fin, "%d%d", &n, &m);
	fscanf(fin, "%c", &ch);

	for(i=1;i<=n;i++)
	{
		fgets(ch, 105, fin);

		for(j=0;j<=m-1;j++)
			{
				if(ch[j]=='R')
				{
					ar[i][j+1]=aj[i][j+1]=1;
					linR=i, colR=j+1;

				}
				else if(ch[j]=='J')
				{
					ar[i][j+1]=aj[i][j+1]=1;
					linJ=i, colJ=j+1;

				}
				else if(ch[j]=='X')

					ar[i][j+1]=aj[i][j+1]=-2;

				else if(ch[j]==' ')
					aj[i][j+1]=ar[i][j+1]=0;

			}
	}


	c[1].l=linR;
	c[1].c=colR;
	c[1].d=1;
	in=sf=1;

	while(in<=sf)
	{
		x=c[in++];
		for(i=0;i<=7;i++)
		{
			y.l=x.l+dl[i];
			y.c=x.c+dc[i];
			if(y.l>=1&&y.l<=n&&y.c>=1&&y.c<=m)
				if(ar[y.l][y.c]==0)
				{
					y.d=x.d+1;
					c[++sf]=y;
					ar[y.l][y.c]=y.d;
				}
		}
	}

	c[1].l=linJ;
	c[1].c=colJ;
	c[1].d=1;
	in=sf=1;

	while(in<=sf)
	{
		x=c[in++];
		for(i=0;i<=7;i++)
		{
			y.l=x.l+dl[i];
			y.c=x.c+dc[i];
			if(y.l>=1&&y.l<=n&&y.c>=1&&y.c<=m)
				if(aj[y.l][y.c]==0)
				{
					y.d=x.d+1;
					c[++sf]=y;
					aj[y.l][y.c]=y.d;
				}
		}
	}


	aj[linJ][colJ]=-2;
	ar[linJ][colJ]=-2;
	aj[linR][colR]=-2;
	ar[linR][colR]=-2;



	mini=30300;

	for(i=1;i<=n;i++)
		for(j=1;j<=m;j++)
			if(ar[i][j]&&ar[i][j]==aj[i][j]&&ar[i][j]!=-2)
				if(ar[i][j]<mini)
				{
					mini=ar[i][j];
					lin=i;
					col=j;
				}


	fprintf(fout, "%d %d %d", mini, lin, col);
	return 0;
}