Cod sursa(job #481773)

Utilizator CossAlbulescu Cosmina Coss Data 1 septembrie 2010 17:36:44
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.21 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;
			}
		}
	}

	/*for (i=1; i<=m; ++i)
	{
		for (j=1; j<=n; ++j)
			printf ("%d ", a[i][j]);
		printf ("\n");
	}*/

	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 ++;
	}

	/*for (i=1; i<=m; ++i)
	{
		for (j=1; j<=n; ++j)
			printf ("%d ", a[i][j]);
		printf ("\n");
	}
	printf ("\n___________\n");*/

	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)
			printf ("%d ", b[i][j]);
		printf ("\n");
	}*/

	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;
}