// Matrice bordată și stivă proprie // Folosește cam 2.900.000 de niveluri pe stivă (pe world-map.in) #include #include #define MAX_N 5000 char a[MAX_N + 2][MAX_N + 2]; short sl[MAX_N * MAX_N], sc[MAX_N * MAX_N]; int ss; int m, n; int maxSs; inline void maybe(int l, int c) { if (a[l][c] == '.') { a[l][c] = 'o'; sl[ss] = l; sc[ss] = c; ss++; } } void fill(int l, int c) { a[l][c] = 'o'; sl[ss] = l; sc[ss] = c; ss = 1; while (ss) { if (ss > maxSs) { maxSs = ss; } ss--; l = sl[ss]; c = sc[ss]; maybe(l - 1, c); maybe(l, c + 1); maybe(l + 1, c); maybe(l, c - 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); printf("Nivelul maxim: %d\n", maxSs); 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); }