Największy obszar jedynek w tablicy dwuwymiarowej

0

Czołem!
Potrzebuję programu liczącego jakiego rozmiaru obszary występują w tablicy dwuwymiarowej. Np. mamy wyspy jedynek wielkości: 4,3,1.
Poniższe rozwiązanie działa bardzo dobrze. Mam problem ze wzbogaceniem go o czynnik "cin", czyli po prostu to od wpisanych wartości zależy rozmiar tablicy i gdzie te wartości się znajdują, bez konieczności zmiany kodu.


#include <iostream>

constexpr int N = 5;
constexpr int M = 8;

int arr[N][M] =
{
{ 0, 0, 0, 0, 1, 1, 0, 0, },
{ 1, 0, 0, 1, 1, 1, 0, 0, },
{ 1, 1, 0, 1, 0, 1, 1, 0, },
{ 0, 0, 0, 1, 1, 1, 1, 0, },
{ 0, 1, 1, 0, 0, 0, 0, 0, },
};

int fill(int arr[N][M], int r, int c) {
  int count = 0;
  if (r < N && arr[r][c]) {
    for (int i = c; i >= 0 && arr[r][i]; --i) {
      arr[r][i] = 0;
      count += fill(arr, r + 1, i) + 1;
    }
    for (int i = c + 1; i < M && arr[r][i]; ++i) {
      arr[r][i] = 0;
      count += fill(arr, r + 1, i) + 1;
    }
  }
  return count;
}

int print_components(int arr[N][M]) {
  for (int r = 0; r < N; ++r) {
    for (int c = 0; c < M; ++c) {
      if (arr[r][c]) {
        std::cout << fill(arr, r, c) << std::endl;
      }
    }
  }
}

int main() {
  print_components(arr);
}
1

Wskaźnik na wskaźnik, to klasyczna dynamiczna tablica dwuwymiarowa.

	int a = 5, b = 5;
	int **tab;
	tab = new int * [a];
	for (int i = 0; i < b; i++)
		tab[i] = new int [b];
0
lion137 napisał(a):

Wskaźnik na wskaźnik, to klasyczna dynamiczna tablica dwuwymiarowa.

	int a = 5, b = 5;
	int **tab;
	tab = new int * [a];
	for (int i = 0; i < b; i++)
		tab[i] = new int [b];

Przepraszam, ale kompletnie nie rozumiem. Chyba niejasno się wyraziłem: wejście od użytkownika (szerokość i wysokość) i następnie standardowe wejście do tablicy dwuwymiarowej.
5 6
1 1 1 1 0
0 0 0 1 0
1 1 0 0 0
1 0 0 0 0
0 0 0 1 0

1 użytkowników online, w tym zalogowanych: 0, gości: 1