123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136 |
- #include "graph.h"
- void Node::add_neigboor(Node* neighboor)
- {
- neighboors.insert(neighboor);
- }
- void Node::remove_neighboor(Node* neighboor)
- {
- neighboors.erase(neighboor);
- }
- Node::Node()
- {
- }
- Node::Node(const string& aname)
- {
- name = aname;
- }
- const string Node::get_name() const
- {
- return name;
- }
- const bool& Node::operator==(const Node& r)
- {
- return name == r.name;
- }
- void Graph::add_node(Node* node)
- {
- if (taken_names[node->name]) {
- throw Graph_exception();
- }
- else {
- taken_names[node->name] = true;
- nodes.insert(node);
- }
- }
- void Graph::remove_node(Node* node)
- {
- nodes.erase(node);
- for (set<Node*>::iterator it = nodes.begin(); it != nodes.end(); it++) {
- (*it)->remove_neighboor(node);
- }
- }
- void Graph::add_edge(Node* begin, Node* end)
- {
- if (nodes.find(begin) == nodes.end())
- return;
- if (nodes.find(end) == nodes.end())
- return;
- begin->add_neigboor(end);
- end->add_neigboor(begin);
- }
- void Graph::remove_edge(Node* begin, Node* end)
- {
- if (nodes.find(begin) == nodes.end())
- return;
- if (nodes.find(end) == nodes.end())
- return;
- begin->remove_neighboor(end);
- end->remove_neighboor(begin);
- }
- int get_number_from_string(int start, string word) {
- int dec = 1, res = 0;
- while (start>=0 && word[start] >= 48 && word[start] <= 57 ) {
- res += ((word[start] - 48) * dec);
- dec *= 10;
- start--;
- }
- return res;
- }
- void Graph::read_file(string file_name)
- {
- ifstream input;
- input.open(file_name);
- map <string, Node> saved;
- if (input.is_open()) {
- string line;
- getline(input, line);
- while (getline(input, line)) {
- string fir = "", sec = "";
- int splitter = 0;
- while (line[splitter] != '\t')
- {
- fir += line[splitter];
- splitter++;
- }
- splitter++;
- while (line[splitter])
- {
- sec += line[splitter];
- splitter++;
- }
- saved[fir] = taken_names[fir] ? saved[fir] : Node(fir);
- saved[sec] = taken_names[sec] ? saved[sec] : Node(sec);
- add_node(&saved[fir]);
- add_node(&saved[sec]);
- add_edge(&saved[fir], &saved[sec]);
- }
- }
- }
|