#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. Вам нужно отслеживать, какие элементы вы уже посетили.