如何在不过度嵌套的情况下,根据需要多次重复此模式?

时间:2014-04-10 13:35:43

标签: c++ formatting output hierarchy

我有这个功能,旨在显示排名系统的层次结构。我希望层次结构可以根据需要嵌套多次。但嵌套所有这些' 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";
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}

2 个答案:

答案 0 :(得分:2)

用户recursionstack来解决此类问题。尝试实现它。如果您遇到问题,请发帖。

答案 1 :(得分:1)

目前代码正在运行5个嵌套循环。即使用模拟递归代码替换此代码,它仍然是非常低效的。如果member_count相对较小(小于200),那么你可以摆脱这种低效率,但如果它变得越来越大,那么代码将会非常缓慢地运行。

您应该更好地整理数据。目前,您有一种邻接列表,其中每个数组元素都有关于图中一条边的信息(CO)。您应该向元素添加一个信息,这将是列表,并且此列表将具有相反的信息(此元素是CO的对象)。这些列表(对于每个元素)都是通过数组运行的。

构建这些列表后,您可以运行其他人正在谈论的递归函数。它会更快。