我有这个功能,旨在显示排名系统的层次结构。我希望层次结构可以根据需要嵌套多次。但嵌套所有这些' for / if'陈述似乎没必要。有没有人有一些关于编写那些意图像这样重复的函数的技巧?
void hierarchy(int x)
{
cout << "HIERARCHY OF COMMAND: " << member[x].name << ", " << member[x].rnk << " [# " << member[x].ID << "]\n";
for (int a = 0; a < member_count; a++)
{
if (member[x].name == member[a].CO)
{
cout << "|---" << member[a].name << ", " << member[a].rnk << " [# "
<< member[a].ID << "]\n";
for (int b = 0; b < member_count; b++)
{
if (member[a].name == member[b].CO)
{
cout << "| |---" << member[b].name << ", " << member[b].rnk << " [# "
<< member[b].ID << "]\n";
for (int c = 0; c < member_count; c++)
{
if (member[b].name == member[c].CO)
{
cout << "| | |---" << member[c].name << ", " << member[c].rnk << " [# "
<< member[c].ID << "]\n";
for (int d = 0; d < member_count; d++)
{
if (member[c].name == member[d].CO)
{
cout << "| | | |---" << member[d].name << ", " << member[d].rnk << " [# "
<< member[d].ID << "]\n";
for (int e = 0; e < member_count; e++)
{
if (member[d].name == member[e].CO)
{
cout << "| | | | |---" << member[e].name << ", " << member[e].rnk << " [# "
<< member[e].ID << "]\n";
}
}
}
}
}
}
}
}
}
}
}
答案 0 :(得分:2)
答案 1 :(得分:1)
目前代码正在运行5个嵌套循环。即使用模拟递归代码替换此代码,它仍然是非常低效的。如果member_count
相对较小(小于200),那么你可以摆脱这种低效率,但如果它变得越来越大,那么代码将会非常缓慢地运行。
您应该更好地整理数据。目前,您有一种邻接列表,其中每个数组元素都有关于图中一条边的信息(CO)。您应该向元素添加一个信息,这将是列表,并且此列表将具有相反的信息(此元素是CO的对象)。这些列表(对于每个元素)都是通过数组运行的。
构建这些列表后,您可以运行其他人正在谈论的递归函数。它会更快。