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;
}
`