Моя функция рекурсии не работает должным образом - PullRequest
0 голосов
/ 01 мая 2019

Мне нужно перебрать структуру данных, которую я создал, чтобы найти путь с наименьшим количеством ходов. Так что мне нужна функция, чтобы сделать выше. http://prntscr.com/nj29v6

Но я заканчиваю с этим. http://prntscr.com/nj2agz

void findSuccessPath(Node& Paths, vector < pair < int, int > >& winMoves, bool& success , Node& winingPath)
{

    // help variable to keep the current locotion
    pair <int, int> currentMove;
    bool childSuccess = false;



    if (Paths.success) 
    {

        //If shortest path found        
        if (minMoves > Paths.nMoves || minMoves == 0 ) 
        {
            success = true;
            winMoves.clear();

            currentMove.first  = Paths.x;
            currentMove.second = Paths.y;

            //cout << "Curents parent at :" << Paths.x << " " << Paths.y << endl;
            winMoves.push_back(currentMove);

            minMoves = Paths.nMoves;

        }
    }
    else 
    {
        //cout << "parent  at :" << Paths.x << " " << Paths.y << endl;
        for (int i = 0; i < Paths.nextNode.size(); i++) 
        {
            cout << i << endl;
            cout << " current Parent at :" << Paths.x << " " << Paths.y << endl;
            cout << "Child at :" << Paths.nextNode.at(i).x << " " << Paths.nextNode.at(i).y << endl;
            findSuccessPath(Paths.nextNode.at(i) ,  winMoves , childSuccess ,  winingPath);
            //cout << "child at " << Paths.nextNode.at(i).x << " " << Paths.nextNode.at(i).y << endl;

            if (childSuccess) 
            {


                currentMove.first  = Paths.x;
                currentMove.second = Paths.y;

                winMoves.push_back(currentMove);
                success = true;
            }

            //Initialize Success Indicator to call the next child move
            childSuccess = false;
        }
    }
}

Итак, чтобы подвести итог моей проблемы, моя рекурсивная функция вместо того, чтобы углубляться в структуру данных (дерево), продолжает повторяться в цикле for, а когда цикл заканчивается, попадает в следующий слой дерева.

...