// Matrice bordată // Moare pe la nivelul 260.000 #include #include #define MAX_N 5000 char a[MAX_N + 2][MAX_N + 2]; int m, n; int maxLevel; void fill(int l, int c, int level) { if (a[l][c] == '.') { a[l][c] = 'o'; // marchează punctul (l, c) ca vizitat if (level > maxLevel) { maxLevel = level; if (level % 100 == 0) { printf("level %d\n", level); } } fill(l - 1, c, level + 1); fill(l, c + 1, level + 1); fill(l + 1, c, level + 1); fill(l, c - 1, level + 1); } } int main(void) { int l0, c0; FILE *f = fopen("fill.in", "r"); fscanf(f, "%d %d %d %d\n", &m, &n, &l0, &c0); for (int i = 1; i <= m; i++) { for (int j = 1; j <= n; j++) { a[i][j] = fgetc(f); } assert(fgetc(f) == '\n'); } fclose(f); fill(l0, c0, 0); printf("Nivelul maxim: %d\n", maxLevel); f = fopen("fill.out", "w"); for (int i = 1; i <= m; i++) { for (int j = 1; j <= n; j++) { fputc(a[i][j], f); } fputc('\n', f); } fclose(f); }