2009-11-24 3 views
0

아래의 문제에 대한 최상의 알고리즘은 무엇입니까?
출력이 유사합니다 나무의 이름 및 생성을 출력벡터 문제에 대한 알고리즘

방법 PrintFamilyTree을 (구현)
이름 : 월 세대 : 0
이름 : 마이크 세대 : 1
이름 : 그렉 세대 : 2
이름 : 캐롤 : 세대 : 2
이름 : 피터 세대 : 3
이름 : 마샤 세대 : 3
이름 : 바비 세대 : 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

+6

당신은 정말로 STL 컨테이너를 상속 받아서는 안됩니다 ... –

+2

사이드 노트로 : 대신 std-containers에서 파생해서는 안됩니다 (가상 dtors가 없기 때문에) ... 어댑터 클래스를 만듭니다 :) – Christian

답변

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

STL 컨테이너는 일반적으로 파생되지 않도록 설계되지 않았습니다. 상속보다는 견제를 생각하십시오.

void main() 

mainint 반환합니다. 항상.

이것은 단순한 문제처럼 보입니다. 나무와 같은 구조를 생각해보십시오. 사용중인 컨테이너 (예 : vector)를 더 적합한 것으로 변경할 수 있습니다.

귀하의 질문에 숙제와 같은 냄새가 있으므로주의해야 할 점이 거의 없습니다.

0
  1. 인쇄 각 자식 객체의 시작 개체
  2. 의 이름과 세대, 이름과 세대를 인쇄 할 수 있습니다. 각 자식 개체 (라인 2와 아이들의 동일한 목록), 자식 객체의 자식 나는 토폴로지 종류가 맞는 생각하는 알고리즘의
1

에 맞춰 2에서 시작하여 트리를 인쇄

  • 하지만, 벡터가 아닌 그래프가 필요합니다

    관련 문제