ciao a tutti, purtroppo non riesco a superare l’ultimo subtask e non ne capisco il motivo. allego il codice:
#include <stdio.h>
#include <assert.h>
#define MAXN 1000
using namespace std;
int R, C;
long long res = 0;
int M[MAXN][MAXN];
int check(int i, int j){
M[i][j]=2;
int a = 1, b = 1, c = 1, d = 1;
if(M[i-1][j] == 1){
if(i-1 == 0)
return 0;
a = check(i-1,j);
}
if(M[i][j+1] == 1){
if(j+1 == C-1)
return 0;
b = check(i,j+1);
}
if(M[i+1][j] == 1){
if(i+1 == R-1)
return 0;
c = check(i+1,j);
}
if(M[i][j-1] == 1){
if(j-1 == 0)
return 0;
d = check(i,j-1);
}
return a && b && c && d;
}
int main() {
int i, j;
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
assert(2 == scanf("%d %d", &R, &C));
for(i=0; i<R; i++)
for (j=0; j<C; j++)
assert(1 == scanf("%d", &M[i][j]));
for(i = 1; i < R-1; i++)
for(j = 1; j < C-1; j++)
if(M[i][j] == 1)
if(check(i, j) && M[i-1][j] != 2 && M[i][j-1] != 2)
res++;
printf("%lld\n", res);
return 0;
}