Advertisement
Guest User

Detectivul

a guest
Aug 24th, 2019
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.43 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstring>
  3. #include <vector>
  4.  
  5. class Node {
  6. public:
  7.     std::string last_name;
  8.     std::string first_name;
  9.     std::string parent_last_name;
  10.     std::string parent_first_name;
  11.     std::string address;
  12.     bool is_alive;
  13.     std::vector<Node*> children;
  14.  
  15.     Node(std::string ln, std::string fn, std::string pln, std::string pfn, std::string addr,
  16.         bool alive): last_name(ln), first_name(fn), parent_last_name(pln), parent_first_name(pfn),
  17.         address(addr), is_alive(alive) {}
  18.  
  19.     ~Node() {}
  20.  
  21.     void add_person(Node* person) {
  22.         // TODO
  23.         children.push_back(person);
  24.     }
  25.  
  26.     void get_alive_relatives(std::vector<Node*>& relatives) {
  27.         // Get all alive people in the family tree
  28.         // TODO
  29.         if (is_alive) {
  30.             relatives.push_back(this);
  31.         }
  32.         for (int i = 0; i < children.size(); i++) {
  33.             children[i]->get_alive_relatives(relatives);
  34.         }
  35.     }
  36. };
  37.  
  38. class Database {
  39. private:
  40.     std::vector<Node*> families;
  41.  
  42.     Node* get_family(std::string last_name) {
  43.         for (Node* family : families)
  44.             if (family->last_name == last_name)
  45.                 return family;
  46.  
  47.         return nullptr;
  48.     }
  49.  
  50. public:
  51.     void add_person(Node* person) {
  52.         // TODO
  53.         Node* t = get_family(person->last_name);
  54.         if (t == nullptr) {
  55.             families.push_back(person);
  56.         } else {
  57.             t->add_person(person);
  58.         }
  59.     }
  60.  
  61.     void get_alive_relatives(std::string last_name, std::vector<Node*>& relatives) {
  62.         // Get all alive people in the family tree for last_name
  63.         // TODO
  64.         Node* t = get_family(last_name);
  65.         if (t != nullptr) {
  66.             t->get_alive_relatives(relatives);
  67.         }
  68.     }
  69. };
  70.  
  71. int main() {
  72.     int n;
  73.     std::string last_name, first_name, parent_last_name, parent_first_name,
  74.         address, last_name_search, alive;
  75.     bool is_alive;
  76.     std::vector<Node*> relatives;
  77.  
  78.     Database db;
  79.  
  80.     std::cin >> n;
  81.  
  82.     for (int i = 0; i < n; i++) {
  83.         std::cin >> last_name >> first_name >> parent_last_name >> parent_first_name
  84.             >> address >> alive;
  85.         if (alive == "alive")
  86.             is_alive = true;
  87.         else
  88.             is_alive = false;
  89.         db.add_person(new Node(last_name, first_name, parent_last_name, parent_first_name,
  90.             address, is_alive));
  91.     }
  92.  
  93.     std::cin >> last_name_search;
  94.     db.get_alive_relatives(last_name_search, relatives);
  95.     for (Node* relative : relatives)
  96.         std::cout << relative->last_name << " " << relative->first_name
  97.             << " - " << relative->address << "\n";
  98. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement