Мне нужно перебрать структуру данных, которую я создал, чтобы найти путь с наименьшим количеством ходов. Так что мне нужна функция, чтобы сделать выше.
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, а когда цикл заканчивается, попадает в следующий слой дерева.