Aiuto Problema Estintori


#1

Sto cercando di risolvere il problema estintori. Il mio codice è costituito da una ricorsiva che in pratica esplora i punti vicini a quelli in cui trovo, con un ciclo for sulla mappa stessa, dei punti appartenenti ad una camera.
Non capisco per quale motivo il programma totalizza solamente 10/100.
Grazie per l’aiuto.

#include <iostream>
#include <fstream>

using namespace std;
ifstream in("input.txt");
ofstream out("output.txt");

int cam=0;
int e=0;
int v[2000][2000];
bool vis[2000][2000];

bool visita(int x, int y, bool ris){
    bool rt=ris;
    if(v[x][y]==2){vis[x][y]=false; rt=true;}
    vis[x][y]=false;
    for(int i=x-1;i<=x+1;i++){
        for(int j=y-1;j<=y+1;j++){
            if((i!=x||j!=y)&&vis[i][j]==true&&v[i][j]!=0){
                vis[i][j]=false;
                
                return visita(i,j,rt);
            }
        }
    }
    return rt;
    
}

int main() {
int r,c;
    in>>r>>c;
 
    
    for(int i=0;i<r;i++){
       for(int y=0;y<c;y++){
          char a; in>>a;
           if(a=='.'){
               v[i][y]=1;
           }
           else if(a=='#'){
               v[i][y]=0;
           }
           else v[i][y]=2;
        
           vis[i][y]=true;
    }
 }
     for(int i=0;i<r;i++){
       for(int y=0;y<c;y++){
           if(vis[i][y]==true&&(v[i][y]==1||v[i][y]==2)){
               
               cam++;
               if(visita(i,y, false))e++;
           }
       }
     }
    out<<cam-e;
}

    `

#2

L’ errore è presente nella funzione ricorisva, precisamente quando nel ciclo più interno restitiuisci visita(i,j,rt).

La funzione deve visitare tutta la stanza, per poi verificare dalle precedenti chiamate se ha trovato un estintore.
Basta una piccola modifica per il 100/100.


#3

Grazie mille. 100/100