Я предполагаю, что я не выхожу за рамки, но все еще получаю эту ошибку при решении проблемы с ОКРУЖЕННЫМИ РЕГИОНАМИ в leetcode.Пожалуйста, помогите мне

#c #c 17

Вопрос:

получена ошибка— — — — — gt;Средство обработки адресов:СМЕРТЕЛЬНЫЙ СИГНАЛ

==31==ОШИБКА: Обработчик адресов: переполнение стека по адресу 0x7ffdad997ff4 (pc 0x000000345ac1 bp 0x7ffdad998040 sp 0x7ffdad997fc0 T0) ==31==ПРЕРЫВАНИЕ…… Пожалуйста, помогите мне.заранее спасибо

 bool dfs(int i,int j,int m,int n,vectorlt;vectorlt;chargt;gt;amp;v){  if(igt;=m||ilt;0||jgt;=n||jlt;0){  return false;  }  if(v[i][j]=='X'){  return true;  }  bool left=dfs(i,j-1,m,n,v);  bool right=dfs(i,j 1,m,n,v);  bool top=dfs(i-1,j,m,n,v);  bool bottom=dfs(i 1,j,m,n,v);  if(leftamp;amp;rightamp;amp;topamp;amp;bottom){    v[i][j]='X';  return true;  }  return false;   } void solve(vectorlt;vectorlt;chargt;gt;amp; board) {  int m=board.size();  int n=board[0].size();  for(int i=1;ilt;m-1;i  ){  for(int j=1;jlt;n-1;j  ){  if(board[i][j]=='O'){  bool temp= dfs(i,j,m,n,board);  }  }  }  return;   }  

Комментарии:

1. У вас есть бесконечная рекурсия, которая завершается только тогда, когда в программе заканчивается пространство стека. например dfs(5, 5, ...) , вызовы dfs(5, 4, ...) , которые dfs(5, 5, ...) сразу же перезванивают.

2. Вам нужно отслеживать, какие элементы вы уже посетили.