Cod sursa(job #123621)

Utilizator mithyPopovici Adrian mithy Data 16 ianuarie 2008 20:18:34
Problema Castel Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.03 kb
#include <stdio.h>
#define NMax 155

int n, m, start, key[NMax][NMax], viz[NMax][NMax], keys[NMax*NMax];
int dx[4] = {-1, 0, 1, 0};
int dy[4] = {0, 1, 0, -1};


void read();
void solve();

int main()
{
	read();
	solve();
	return 0;
}

void read()
{
	int i, j;
	FILE *fin = fopen("castel.in", "rt");
	fscanf(fin, "%d %d %d", &n, &m, &start);
	for (i = 1; i <= n; i++)
		for (j = 1; j <= m; j++)
			fscanf(fin, "%d", &key[i][j]);
}

void solve()
{
	int go = 1, ok, i, j, k;
	keys[key[(start-1)/m+1][(start-1)%m+1]] = 1;
	viz[(start-1)/m+1][(start-1)%m+1] = 1;
	while (go)
	{
		go = 0;
		for (i = 1; i <= n; i++)
			for (j = 1; j <= m; j++)
			{
				ok = keys[key[i][j]] && (viz[i][j] == 0);
				for (k = 0; ok == 1 && k < 4; k++)
					if (viz[i+dx[k]][j+dy[k]])
						ok = 2;
				if (ok == 2)
				{
					viz[i][j] = 1;
					keys[(i-1)*m + j] = 1;
					go++;
				}
			}
	}
	k = 0;
	for (i = 1; i <= n; i++)
		for (j = 1; j <= m; j++)
			k += viz[i][j];
	fprintf(fopen("castel.out", "wt"), "%d\n", k);
}