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

How can I make this pattern repeat as many times as needed without making it excessively nested?

本文关键字:模式 情况下 嵌套      更新时间:2023-10-16

我有这个函数是为了显示排名系统的层次结构。我希望层次结构可以嵌套任意次数。但是嵌套所有这些"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";
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}

使用递归或堆栈来解决此类问题。试着实现它。如果你遇到问题,请发帖。

当前代码正在运行5个嵌套循环。即使用模拟递归代码替换此代码,它仍然会非常低效。如果member_count相对较小(小于200),那么您可以避免这种低效率,但如果它变大,代码运行速度将非常慢。

你应该更好地组织你的数据。目前,您有一种邻接列表,其中每个数组元素都有关于图中一条边(CO)的信息。您应该向元素再添加一个信息,即列表,而该列表将具有相反的信息(该元素是CO)。这些列表(针对每个元素)是在数组中一次性构建的。

当建立这些列表时,您可以运行其他人正在谈论的递归函数。而且速度会快得多。