Cod sursa(job #1335102)

Utilizator pas.andreiPopovici Andrei-Sorin pas.andrei Data 4 februarie 2015 23:45:00
Problema Rj Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.97 kb
#include <stdio.h>
#define MAX 102

int n, m, x1, y1, x2, y2, x0, y0, dist, distMin = MAX*MAX;
int r[MAX][MAX], j[MAX][MAX];
struct {
	int x, y;
} c[MAX*MAX], ultim, actual;
int dlin[8] = { 0, 1, 0, -1, -1, 1, 1, -1 };
int dcol[8] = { 1, 0, -1, 0, 1, 1, -1, -1 };

void citire();
void bordare();
void lee(int v[][102], int x0, int y0);

int main() {
	citire();
	bordare();

	for (int i = 0; i <= n + 1; i++) {
		for (int k = 0; k <= m + 1; k++) {
			if (r[i][k] == -1)
				putchar('X');
			else
				putchar(' ');
		}
		putchar('\n');
	}

	lee(r, x1, y1);
	lee(j, x2, y2);

	for (int i = 1; i <= n; i++) {
		for (int k = 1; k <= m; k++) {
			if (r[i][k] == j[i][k] && r[i][k] > 0 && r[i][k] < distMin) {
				x0 = i;
				y0 = k;
				dist = r[i][k];
				distMin = dist;
			}
		}
	}

	FILE *fout = fopen("rj.out", "w");
	fprintf(fout, "%d %d %d\n", dist, x0, y0);
	fclose(fout);

	return 0;
}

void lee(int v[102][102], int x0, int y0) {
	int inc, sf, i;

	v[x0][y0] = 1;
	c[0].x = x0;
	c[0].y = y0;
	inc = sf = 0;

	while (inc <= sf) {
		ultim = c[inc];
		inc++;

		for (i = 0; i < 8; i++) {
			actual.x = ultim.x + dlin[i];
			actual.y = ultim.y + dcol[i];

			if (v[actual.x][actual.y] == 0) {
				v[actual.x][actual.y] = v[ultim.x][ultim.y] + 1;
				c[++sf] = actual;
			}
		}
	}
}

void citire() {
	int i, k, x, y;
	char c;

	FILE *fin = fopen("rj.in", "r");
	fscanf(fin, "%d %d\n", &n, &m);

	for (i = 1; i <= n; i++) {
		for (k = 1; k <= m; k++) {
			c = fgetc(fin);
			if (c == 'X')
				r[i][k] = j[i][k] = -1;
			else if (c == ' ')
				r[i][k] = j[i][k] = 0;
			else if (c == 'R') {
				x1 = i;
				y1 = k;
			}
			else if (c == 'J') {
				x2 = i;
				y2 = k;
			}
		}

		fgetc(fin);
	}

	fclose(fin);
}

void bordare() {
	int i;

	for (i = 0; i <= m + 1; i++)
		r[0][i] = r[n + 1][i] = j[0][i] = j[n + 1][i] = -1;

	for (i = 0; i <= n + 1; i++)
		r[i][0] = r[i][m + 1] = j[i][0] = j[i][m + 1] = -1;
}