—
Всем привет,
Я пытаюсь реализовать «Поиск в глубину» для графа сцены.
Это то, что я имею до сих пор — но я застрял, пытаясь понять, как глубоко текущий элемент находится внутри графика. Допустим, я мог бы считать order.size () как глубину для первой ветви — но как мне вытолкнуть элементы, когда код снова перескочил в следующую ветку? Любая подсказка будет принята с благодарностью. Заранее большое спасибо.
//======================================================================
//depth first search
//======================================================================
// clean start - init visited flags in joints
for (int i = 0 ; i < m_joints.size(); i++){m_joints[i]->visited = false;}
// joint indices
vector<int> stack;
vector<int> order;
for(int i = 0; i < m_joints.size(); i++)
{
if(!m_joints[i]->visited)
{
stack.push_back(i);
while(!stack.empty())
{
int top = stack.back();
stack.pop_back();
if(m_joints[top]->visited)
{
continue;
}
m_joints[top]->visited = true;
order.push_back(top);
// need to know how deep I am inside of the scene graph here
// update transformation matrix here
// draw joint here
for(int j = 0 ; j < m_joints[top]->children.size();j++)//all neighbours of top
{
if(!m_joints[top]->children[j]->visited)
{
stack.push_back(m_joints[top]->children[j]->listPosition);
}
}
}
}
}
Если я хорошо понимаю вашу проблему, вы можете просто добавить целочисленную переменную «глубина» к каждому элементу и обновлять ее каждый раз, когда глубина элемента изменяется. Кроме того, вы всегда можете спросить свой элемент, на какой глубине он в настоящее время
Других решений пока нет …