Cod sursa(job #489035)

Utilizator bora_marianBora marian bora_marian Data 30 septembrie 2010 19:20:46
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.92 kb
#include <stdio.h>

char ch;
int a[150][150], b[150][150];
int m, n, i, j, k;
int primulr = 1, primulj = 1;
int nrx, nry;
int Min = 100000, l1, c1;

int dx[] = {0, -1, -1, 0, 1, 1, 1, 0, -1};
int dy[] = {0 ,0, 1, 1, 1, 0, -1, -1,-1};

struct coada
{
	int x;
	int y;
};

struct coada cr[100001], cj[100001];

int main ()
{
	FILE *f = fopen ("rj.in","r");
	FILE *g = fopen ("rj.out","w");
	fscanf (f,"%d %d",&m, &n);
	
	for (i=0; i<=n+1; ++i)
		a[0][i] = a[m+1][i] = b[0][i] = b[m+1][i] = -2;
	for (i=0; i<=m+1; ++i)
		a[i][0] = a[n+1][i] = b[i][0] = a[n+1][i] = -2;
	
	for (i=1; i<=m; ++i)
	{
		fscanf (f,"%c", &ch);
		for (j=1; j<=n; ++j)
		{
			fscanf (f,"%c", &ch);
			if (ch == ' ')
				a[i][j] = b[i][j] = -1;
			else 
				if (ch == 'X')
					a[i][j] = b[i][j] = -2;
			else 
				if (ch == 'R')
				{
					a[i][j] = 0;
				    b[i][j] = -1;
				    cr[1].x = i;
					cr[1].y = j;
			    }
			else 
				if (ch == 'J')
			    {
					b[i][j] = 0;
					a[i][j] = -1;
				    cj[1].x = i;
				    cj[1].y = j;
			    }
		}
	}
	i = k = 1;
	while (primulr <= i)
	{
		for (j=1; j<=8; ++j)
		{
			nrx = cr[primulr].x + dx[j];
			nry = cr[primulr].y + dy[j];
			if (a[nrx][nry] == -1)
			{
				a[nrx][nry] = a[cr[primulr].x][cr[primulr].y] + 1;
				i ++;
				cr[i].x = nrx;
				cr[i].y = nry;
			}
		}
		primulr ++;
	}
	while (primulj <= k)
	{
		for (j=1; j<=8; ++j)
		{
			nrx = cj[primulj].x + dx[j];
			nry = cj[primulj].y + dy[j];
			if (b[nrx][nry] == -1)
			{
				b[nrx][nry] = b[cj[primulj].x][cj[primulj].y] + 1;
				k ++;
				cj[k].x = nrx;
				cj[k].y = nry;
			}
		}
		primulj ++;
	}
	for (i=1; i<=m; ++i)
		for (j=1; j<=n; ++j)
			if (a[i][j] == b[i][j] && a[i][j] > 0)
			{
				if (Min > a[i][j])
				{
					Min = a[i][j];
					l1 = i;
					c1 = j;
				}
			}
	
	fprintf (g,"%d %d %d", Min + 1, l1, c1);
			
	fclose(g);
	fclose(f);
	return 0;
}