向量问题的算法

时间:2009-11-24 07:05:59

标签: c++

对于下面提到的问题,什么是最好的算法。

实现方法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();
}

3 个答案:

答案 0 :(得分:5)

class Human : public std::vector<Human *>

不是一个好主意 - STL容器通常不是为了派生而设计的。想想遏制而不是继承。

void main()

main会返回int。总是。

这看起来像一个直截了当的问题。想想树状结构。您可能希望将正在使用的容器(即vector)更改为更合适的容器。

警告,你的问题有点像家庭作业,所以回复很少!

答案 1 :(得分:1)

对于算法,我认为拓扑排序适合,但你需要一个图形而不是矢量

答案 2 :(得分:0)

  1. 打印起始对象的名称和代数
  2. 对于每个子对象,请打印其名称和代。
  3. 对于每个子对象(与第2行相同的子级列表),从第2行开始打印其子树对象的子对象