对于下面提到的问题,什么是最好的算法。
实现方法PrintFamilyTree(),用于打印树的名称和生成
输出应类似于
姓名:Jan Generation:0
姓名:Mike Generation:1
名称:格雷格一代:2
姓名:Carol:代:2
姓名:彼得一代:3
姓名:Marcia Generation:3
姓名:Bobby Generation:1
class Human : public std::vector<Human *>
{
public:
Human(const std::string &name) : m_Name(name) {};
virtual void PrintFamilyTree(const short &generation = 0) const;
protected:
std::string m_Name;
};
class Male: public Human
{
public:
Male(const std::string &name) : Human(name) {};
};
class Female: public Human
{
public:
Female(const std::string &name) : Human(name) {};
};
void main()
{
Male m1("Mike"), m2("Greg"), m3("Peter"), m4("Bobby");
Female f1("Carol"), f2("Marcia"), f3("Jan");
m1.push_back(&m2);
f1.push_back(&m3);
f1.push_back(&f2);
m1.push_back(&f1);
f3.push_back(&m1);
f3.push_back(&m4);
f3.PrintFamilyTree();
}
答案 0 :(得分:5)
class Human : public std::vector<Human *>
不是一个好主意 - STL容器通常不是为了派生而设计的。想想遏制而不是继承。
void main()
main
会返回int
。总是。
这看起来像一个直截了当的问题。想想树状结构。您可能希望将正在使用的容器(即vector
)更改为更合适的容器。
警告,你的问题有点像家庭作业,所以回复很少!
答案 1 :(得分:1)
对于算法,我认为拓扑排序适合,但你需要一个图形而不是矢量
答案 2 :(得分:0)