Почему моя рекурсивная часть не работает. Я нашел проблему в хакерской земле и пытаюсь решить этот вопрос по-своему. Этот код работает хорошо, но без вывода. Только принять участие, а затем застрял. Я пытался найти ошибку. Но я не мог решить. Может быть, простая ошибка, но, пожалуйста, помогите мне. проблемная ссылка https://www.hackerearth.com/problem/algorithm/question-7-4/
#include<stdio.h>
#include<iostream>
using namespace std;
int mp[1001][1001];
bool visit[1001][1001];
int count;
void DFS(int r,int c,int n,int m, int l)
{
while(l>=0)
{ i++;
if(visit[r-1][c]==false && r>0)
{
if(mp[r][c]==1 || mp[r][c]==2 || mp[r][c]==4 || mp[r][c]==7)
{
if(mp[r-1][c]==1 || mp[r-1][c]==2 || mp[r-1][c]==5 || mp[r-1][c]==6)
{
visit[r-1][c]=true;
count++;
l++;
DFS(r-1,c,n,m,l);
}
}
}
if(visit[r+1][c]==false && r+1<n)
{
if(mp[r][c]==1 || mp[r][c]==2 || mp[r][c]==4 || mp[r][c]==7)
{
if(mp[r+1][c]==1 || mp[r+1][c]==2 || mp[r+1][c]==5 || mp[r+1][c]==6)
{
visit[r+1][c]=true;
count++;
l++;
DFS(r+1,c,n,m,l);
}
}
}
if(visit[r][c-1]==false && c>0)
{
if(mp[r][c]==1 || mp[r][c]==2 || mp[r][c]==4 || mp[r][c]==7)
{
if(mp[r][c-1]==1 || mp[r][c-1]==2 || mp[r][c-1]==5 || mp[r][c-1]==6)
{
visit[r][c-1]=true;
count++;
l++;
DFS(r,c-1,n,m,l);
}
}
}
if(visit[r][c+1]==false && c+1<m)
{
if(mp[r][c]==1 || mp[r][c]==2 || mp[r][c]==4 || mp[r][c]==7)
{
if(mp[r][c+1]==1 || mp[r][c+1]==2 || mp[r][c+1]==5 || mp[r][c+1]==6)
{
visit[r][c+1]=true;
count++;
l++;
DFS(r,c+1,n,m,l);
}
}
}
}
}
int main()
{
int t,n,m,r,c,l,x;
count=1;
scanf("%d",&t);
for(int k=0; k<t; k++)
{
scanf("%d%d%d%d%d",&n,&m,&r,&c,&l);
for(int i=0; i<n; i++)
{
for(int j=0; j<m; j++)
{
scanf("%d",&x);
mp[i][j]=x;
visit[i][j]=false;
}
}
if(mp[r][c]==0)
printf("0\n");
else
DFS(r,c,n,m,l);
printf("%d",count);
}
return 0;
}