#include #include #include #include #include #include using namespace std; class Node { typedef set::const_iterator node_iterator; private: string name; set neighboors; void add_neigboor(Node* neighboor); void remove_neighboor(Node* neighboor); public: Node(); 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(); }; const bool& operator == (const Node& r); friend class Graph; }; class Graph { typedef set::const_iterator node_iterator; private: map taken_names; map saved; set nodes; void write_graph(vector > ind); public: Graph() {}; void add_node(Node* node); void remove_node(Node* node); void add_edge(Node* begin, Node* end); void remove_edge(Node* begin, Node* end); //задание void read_file(string file_name); void find_independent_graphs(); node_iterator begin() { return nodes.begin(); }; node_iterator end() { return nodes.end(); }; friend class Node; }; class Graph_exception {}; class BFS { typedef set::const_iterator node_iterator; const Graph& graph; public: BFS(const Graph& agraph) : graph(agraph) {} bool connected(Node* begin, Node* end); friend Graph; friend Node; }; class DFS { typedef set::const_iterator node_iterator; private: const Graph& graph; set visited; bool connected(Node* begin, Node* end, int depth); public: DFS(const Graph& agraph) : graph(agraph) {} bool connected(Node* begin, Node* end); friend Graph; friend Node; };