Рекурсия в DFS - PullRequest
       19

Рекурсия в DFS

0 голосов
/ 21 октября 2019

Почему моя рекурсивная часть не работает. Я нашел проблему в хакерской земле и пытаюсь решить этот вопрос по-своему. Этот код работает хорошо, но без вывода. Только принять участие, а затем застрял. Я пытался найти ошибку. Но я не мог решить. Может быть, простая ошибка, но, пожалуйста, помогите мне. проблемная ссылка 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;
}
...