Advertisement
deushiro

prts

Mar 26th, 2021
455
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.03 KB | None | 0 0
  1.  
  2. #ifndef HOMEWORK_1_PTRSGRAPH_H
  3. #define HOMEWORK_1_PTRSGRAPH_H
  4.  
  5. #include "node.h"
  6. #include "../graph.h"
  7.  
  8. template<typename T = void>
  9. class PtrsGraph : public IPtrsGraph<T> {
  10.  
  11. public:
  12.     virtual void AddEdge(Node<T> *from, Node<T> *to, T &&_obj) {
  13.         from->next.emplace_back(to, _obj);
  14.         to->prev.emplace_back(from, _obj);
  15.     };
  16.  
  17.     PtrsGraph() = default;
  18.  
  19.     virtual int VerticesCount() const { return static_cast<int>(nodes.size()); };
  20.  
  21.     virtual void GetNextVertices(Node<T> *vertex, std::vector<Node<T> *> &vertices) const {
  22.         for(std::pair<Node<T>*, T> t : vertex->next){
  23.             vertices.emplace_back(t.first);
  24.         }
  25.     };
  26.  
  27.     virtual void GetPrevVertices(Node<T> *vertex, std::vector<Node<T> *> &vertices) const {
  28.         for(std::pair<Node<T>*, T> t : vertex->prev){
  29.             vertices.emplace_back(t.first);
  30.         }
  31.     };
  32.  
  33.     virtual void DeepFirstSearch(Node<T> *vertex, std::vector<Node<T> *> &vertices) const {
  34.         std::set<Node<T>*> used;
  35.         _dfs(vertex, vertices, used);
  36.     };
  37.  
  38.     virtual void BreadthFirstSearch(Node<T> *vertex, std::vector<Node<T> *> &vertices) const {
  39.         std::set<Node<T> *> used;
  40.         std::queue<Node<T> *> order;
  41.         order.push(vertex);
  42.  
  43.         while(!order.empty()){
  44.             vertex = order.front();
  45.             order.pop();
  46.             used.insert(vertex);
  47.             vertices.push_back(vertex);
  48.             for(std::pair<Node<T>*, T> edge : vertex->next){
  49.                 if(used.find(edge.first) == used.end())
  50.                     order.push(edge.first);
  51.             }
  52.         }
  53.  
  54.     };
  55.  
  56. protected:
  57.     std::set<Node<T>*> nodes;
  58.  
  59.     void _dfs(Node<T> *vertex, std::vector<Node<T> *> &vertices, std::set<Node<T>*> used) const{
  60.         used.insert(vertex);
  61.         vertices.push_back(vertex);
  62.         for(std::pair<Node<T>*, T> edge : vertex->next){
  63.             if(used.find(edge.first) == used.end())
  64.                 _dfs(edge.first, vertices, used);
  65.         }
  66.     }
  67. };
  68.  
  69. #endif //HOMEWORK_1_PTRSGRAPH_H
  70.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement