我正在寻找在向量内的节点之间生成所有路由的最有效方法。想象一下以下(伪)代码:
vector<vector<Node>> step(vector<Node> list, Node nextStep)
{
// 1. Erase current Node to avoid an infinite loop
for(vector<Node>::iterator it = list.begin(); it != list.end(); ++it)
{
if((*it) == nextStep)
{
list.erase(e);
break;
}
}
// 2. Dig deeper into the list if more elements are available
vector<vector<Node>> returnVector;
if(list.size() > 0)
{
for(vector<Node>::iterator it = list.begin(); it != list.end(); ++it)
{
if(/* (*it) meets certain conditions*/)
{
vector<vector<Node>> tmp = step(list, (*it)); // Here the function calls itself
for(vector<vector<Node>>::iterator n = tmp.begin(); n != tmp.end(); ++n)
{
// 3. Insert "nextStep" at the beginning of the new path
(*n).insert((*n).begin(), nextStep);
// 4. Add new path to returnVector
returnVector.push_back((*n));
}
if(/* "nextStep" meets certain conditions */)
{
// 5. Add "nextStep" as Node aswell
returnVector.push_back(std::vector<Node>{nextStep});
}
}
}
}
return returnVector;
}
/*****
.
.
.
.
*/
void run()
{
vector<Node> v(100, Node());
for(auto n : v)
{
step(v, n);
}
}
此函数递归计算向量中的所有路由。我已经测试了它并且它工作得很好 - 只要向量中的元素数量不会太大。
我对这个编程领域非常陌生(递归和函数,其中性能实际上非常重要)。正如我上面已经写过的,我正在寻找一种更有效的方法来完成同样的任务。向量的大小可能会变得非常大并且性能会受到严重影响,从而导致CPU和RAM的使用,这可能是由于递归造成的。
我知道可以有很多组合,但也许已经有更好的算法用于此任务。