2009-11-24 71 views
0

下面提到的问题最好的算法是什么?矢量问题算法

实现方法PrintFamilyTree()打印出
输出应类似于树的名称和代
名称:扬代:0
名称:麦克代:1
名称:格雷格代:2
名称:卡罗尔:代:2
名称:彼得·代:3
名称:玛西娅代:3
角色:Bobby代: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(); 
} 
+2

看起来像功课吗? – Guge 2009-11-24 07:13:19

+6

你真的不应该继承STL容器... – 2009-11-24 07:13:51

+2

作为一个方面说明:你不应该从std-containers(因为它们没有虚拟dtors)派生出来,而是......做一个适配器类:) – Christian 2009-11-24 07:14:35

回答

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

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

void main() 

main返回int。总是。

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

被警告,你的问题很像作业,所以会有很少的回应!

0
  1. 打印的名字和生成的起点对象
  2. 对于每个子对象,打印他们的名字和生成。
  3. 对于每个子对象(儿童线2的相同的列表),通过启动在与子对象的儿童
1

对于算法我觉得一个拓扑排序将拟合线2打印他们的树,但你需要图形不是矢量