graph.h 1.7 KB

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