Java 用不同数据类型的节点实现树
我必须组合计算一项任务的所有可能案例。我想为此做一棵树。有几个作业,每个作业都有几个子作业。有很多代理可以做这些工作。假设作业1子作业1可以由代理1或2完成,则作业1子作业2将由任一代理完成。然后将启动作业2。等等 由于节点是不同的,并且子节点的数量在不同级别上也会发生变化,因此我的问题是:Java 用不同数据类型的节点实现树,java,c++,tree,tree-search,Java,C++,Tree,Tree Search,我必须组合计算一项任务的所有可能案例。我想为此做一棵树。有几个作业,每个作业都有几个子作业。有很多代理可以做这些工作。假设作业1子作业1可以由代理1或2完成,则作业1子作业2将由任一代理完成。然后将启动作业2。等等 由于节点是不同的,并且子节点的数量在不同级别上也会发生变化,因此我的问题是: 实现相同功能的最佳数据结构是什么 使用您推荐的数据结构遍历树的最佳方法是什么 请给出具体的C++/Java示例或web源代码,而不仅仅是抽象的建议,因为我不擅长编码 编辑: 请参考我心目中的树的流程图 嗯,
嗯,我认为树不是满足您需求的最佳数据结构。我建议使用
std::vector
的Jobs
。每个作业
都应该有一个子作业的容器
您的计划可以在向量中迭代,这比在树中迭代容易得多
编辑1:代码
class Subjob;
class Job
{
std::vector<Subjob> other_jobs;
};
std::vector<Job> task_container;
类主题;
班级作业
{
std::矢量其他_作业;
};
std::向量任务_容器;
由于声誉不佳,我无法发布图像。如果添加一个链接,肯定会有人编辑您的问题以包含该图像。@JoachimPileborg添加了一个有用的图像链接。@gknicker请参阅编辑部分中的链接,我可以通过任务容器
轻松迭代,如:vector::iterator it;对于(it=task\u container.begin();it!=task\u container.end();++it)
。但是如何使用it迭代器来访问其他作业的向量元素呢?请给出代码。遍历向量都是一样的。对于成员其他_作业
,您将初始化一个迭代器,std::vector::iterator
,直到开始,其他_作业。begin()
,并增加迭代器以指向下一个元素。因此,我将初始化成员其他_作业的迭代器it
,直到开头,如it.other_jobs.begin()
或it->other_jobs.begin()
?