graph.h 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. #include <string>
  2. #include <map>
  3. #include <set>
  4. #include <fstream>
  5. #include <vector>
  6. #include <iostream>
  7. using namespace std;
  8. class Node {
  9. typedef set<Node*>::const_iterator node_iterator;
  10. private:
  11. string name;
  12. set <Node*> neighboors;
  13. void add_neigboor(Node* neighboor);
  14. void remove_neighboor(Node* neighboor);
  15. public:
  16. Node();
  17. Node(const string& aname);
  18. const string get_name() const;
  19. node_iterator nb_begin() const {
  20. return neighboors.begin();
  21. };
  22. node_iterator nb_end() const {
  23. return neighboors.end();
  24. };
  25. const bool& operator == (const Node& r);
  26. friend class Graph;
  27. };
  28. class Graph
  29. {
  30. typedef set<Node*>::const_iterator node_iterator;
  31. private:
  32. map <string, bool> taken_names;
  33. map <string, Node> saved;
  34. set<Node*> nodes;
  35. void write_graph(vector <vector <node_iterator> > ind);
  36. public:
  37. Graph() {};
  38. void add_node(Node* node);
  39. void remove_node(Node* node);
  40. void add_edge(Node* begin, Node* end);
  41. void remove_edge(Node* begin, Node* end);
  42. //çàäàíèå
  43. void read_file(string file_name);
  44. void find_independent_graphs();
  45. node_iterator begin() {
  46. return nodes.begin();
  47. };
  48. node_iterator end() {
  49. return nodes.end();
  50. };
  51. friend class Node;
  52. };
  53. class Graph_exception {};
  54. class BFS
  55. {
  56. typedef set<Node*>::const_iterator node_iterator;
  57. const Graph& graph;
  58. public:
  59. BFS(const Graph& agraph) : graph(agraph) {}
  60. bool connected(Node* begin, Node* end);
  61. friend Graph;
  62. friend Node;
  63. };
  64. class DFS {
  65. typedef set<Node*>::const_iterator node_iterator;
  66. private:
  67. const Graph& graph;
  68. set<Node*> visited;
  69. bool connected(Node* begin, Node* end, int depth);
  70. public:
  71. DFS(const Graph& agraph) : graph(agraph) {}
  72. bool connected(Node* begin, Node* end);
  73. friend Graph;
  74. friend Node;
  75. };