如何在不使其过度嵌套的情况下使此模式根据需要重复多次
How can I make this pattern repeat as many times as needed without making it excessively nested?
我有这个函数是为了显示排名系统的层次结构。我希望层次结构可以嵌套任意次数。但是嵌套所有这些"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)。这些列表(针对每个元素)是在数组中一次性构建的。
当建立这些列表时,您可以运行其他人正在谈论的递归函数。而且速度会快得多。
相关文章:
- 在没有太多条件句的情况下,我如何避免被零除
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 在未初始化映射的情况下,将值插入到映射的映射中
- 是默认情况下分配给char数组常量的值
- 在这种情况下我应该使用哪种设计模式
- 如何在不破坏装饰器模式的情况下瘦身胖界面?
- 在我的情况下,多重继承是一种好的设计模式吗?
- 在没有指针的情况下以C 实施策略模式
- 在某些情况下,通配符模式匹配失败
- 如何在不必绑定到特定类的情况下实现观察者模式
- 如何在不参考文档的情况下获得 g++ 编译器的 c++ 的默认模式
- 如何在过剩的情况下获取当前窗口模式
- 用于在不使用 RTTI 的情况下缓存不同派生类型的设计模式
- 如何在不使用非构造函数的方法的情况下应用singleton设计模式来返回类对象
- 在什么情况下,单例设计模式可能会生成同一单例类的多个实例
- 在什么情况下我们应该采用国家模式
- 如何在不使其过度嵌套的情况下使此模式根据需要重复多次
- 在这种情况下,哪种设计模式有利于实现运行 tiime 多态性
- 在没有正则表达式的情况下拾取特定的字符串模式
- 我可以在不使用new()的情况下实现工厂模式构造吗?