#include #include using namespace std; const int MAX_M = 1000; const int MAX_N = 1000; int m, n, p; int scacchiera[MAX_M][MAX_N]; /* data una cella, cancella tutta la classe di equivalenza * e ritorna 1 se tale insieme è non vuoto */ int cancella_adiacenti(int r, int c){ if (scacchiera[r][c] == 0 || scacchiera[r][c] == 1) return 0; scacchiera[r][c] = 1; if (r < m) cancella_adiacenti(r+1, c); if (c < n) cancella_adiacenti(r, c+1); if (r > 0) cancella_adiacenti(r-1, c); if (c > 0) cancella_adiacenti(r, c-1); return 1; } int conta_critici(){ int critici = 0; for(int row=0; row 0 ? 1 : 0; if (scacchiera[row][col] > 0){ if (row < m) adj_sum += scacchiera[row+1][col] > 0 ? 1 : 0; if (col < n) adj_sum += scacchiera[row][col+1] > 0 ? 1 : 0; if (row > 0) adj_sum += scacchiera[row-1][col] > 0 ? 1 : 0; if (col > 0) adj_sum += scacchiera[row][col-1] > 0 ? 1 : 0; if (adj_sum >=3){ // il punto è probabilmente critico critici++; } } } } return critici; } int main() { ifstream fin("input.txt"); fin >> m >> n >> p; for(int row=0; row> row >> col; scacchiera[row-1][col-1] = 2; } fin.close(); /* per ogni cella della scacchiera cancello la sua classe di equivalenza * e ne conto la quantità */ int connect = 0; for(int row=0; row