Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cstring>
- #include <vector>
- class Node {
- public:
- std::string last_name;
- std::string first_name;
- std::string parent_last_name;
- std::string parent_first_name;
- std::string address;
- bool is_alive;
- std::vector<Node*> children;
- Node(std::string ln, std::string fn, std::string pln, std::string pfn, std::string addr,
- bool alive): last_name(ln), first_name(fn), parent_last_name(pln), parent_first_name(pfn),
- address(addr), is_alive(alive) {}
- ~Node() {}
- void add_person(Node* person) {
- // TODO
- children.push_back(person);
- }
- void get_alive_relatives(std::vector<Node*>& relatives) {
- // Get all alive people in the family tree
- // TODO
- if (is_alive) {
- relatives.push_back(this);
- }
- for (int i = 0; i < children.size(); i++) {
- children[i]->get_alive_relatives(relatives);
- }
- }
- };
- class Database {
- private:
- std::vector<Node*> families;
- Node* get_family(std::string last_name) {
- for (Node* family : families)
- if (family->last_name == last_name)
- return family;
- return nullptr;
- }
- public:
- void add_person(Node* person) {
- // TODO
- Node* t = get_family(person->last_name);
- if (t == nullptr) {
- families.push_back(person);
- } else {
- t->add_person(person);
- }
- }
- void get_alive_relatives(std::string last_name, std::vector<Node*>& relatives) {
- // Get all alive people in the family tree for last_name
- // TODO
- Node* t = get_family(last_name);
- if (t != nullptr) {
- t->get_alive_relatives(relatives);
- }
- }
- };
- int main() {
- int n;
- std::string last_name, first_name, parent_last_name, parent_first_name,
- address, last_name_search, alive;
- bool is_alive;
- std::vector<Node*> relatives;
- Database db;
- std::cin >> n;
- for (int i = 0; i < n; i++) {
- std::cin >> last_name >> first_name >> parent_last_name >> parent_first_name
- >> address >> alive;
- if (alive == "alive")
- is_alive = true;
- else
- is_alive = false;
- db.add_person(new Node(last_name, first_name, parent_last_name, parent_first_name,
- address, is_alive));
- }
- std::cin >> last_name_search;
- db.get_alive_relatives(last_name_search, relatives);
- for (Node* relative : relatives)
- std::cout << relative->last_name << " " << relative->first_name
- << " - " << relative->address << "\n";
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement