|
@@ -0,0 +1,59 @@
|
|
|
+
|
|
|
+#include <string>
|
|
|
+#include <set>
|
|
|
+using namespace std;
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+class Node {
|
|
|
+
|
|
|
+ typedef set<Node*>::const_iterator node_iterator;
|
|
|
+
|
|
|
+private:
|
|
|
+ string name;
|
|
|
+ set <Node*> neighboors;
|
|
|
+ void add_neigboor(Node* neighboor);
|
|
|
+ void remove_neighboor(Node* neighboor);
|
|
|
+
|
|
|
+public:
|
|
|
+ Node(const string& aname);
|
|
|
+ const string get_name() const;
|
|
|
+
|
|
|
+
|
|
|
+ node_iterator nb_begin() const {
|
|
|
+ return neighboors.begin();
|
|
|
+ };
|
|
|
+ node_iterator nb_end() const {
|
|
|
+ return neighboors.end();
|
|
|
+ };
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ friend class Graph;
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+};
|
|
|
+
|
|
|
+class Graph
|
|
|
+{
|
|
|
+ typedef set<Node*>::const_iterator node_iterator;
|
|
|
+private:
|
|
|
+ set<Node*> nodes;
|
|
|
+public:
|
|
|
+ void add_node(Node* node);
|
|
|
+ void remove_node(Node* node);
|
|
|
+ void add_edge(Node* begin, Node* end);
|
|
|
+ void remove_edge(Node* begin, Node* end);
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ node_iterator begin() {
|
|
|
+ return nodes.begin();
|
|
|
+ };
|
|
|
+
|
|
|
+ node_iterator end() {
|
|
|
+ return nodes.end();
|
|
|
+ };
|
|
|
+};
|
|
|
+
|