8 : _edges(0), _vertices(), _maxvert(-1)
10 ifstream fin(file_name);
11 if ( fin.is_open() ) {
14 while ( fin >> k >> l) {_edges.push_back({k, l});}
17 cout <<
" Error handling \n";
18 if ( fin.bad() ) {
throw runtime_error(
"Schwerer Fehler in istr");}
20 cout <<
" Failed in reading all data.\n";
24 _edges.shrink_to_fit();
27 cout <<
"\nFile " << file_name <<
" has not been found.\n\n" ;
28 assert( fin.is_open() &&
"File not found." );
31 DetermineNumberVertices();
41 vector<vector<unsigned int>> n2n(nnode);
42 for (
auto _edge : _edges) {
43 auto const v0 = _edge[0];
44 auto const v1 = _edge[1];
45 n2n.at(v0).push_back(v1);
46 n2n.at(v1).push_back(v0);
49 for (
auto & k : n2n) {
50 sort(k.begin(), k.end());
57 void graph::DetermineNumberVertices()
62 unsigned int nnode = 0;
63 for (
auto & _edge : _edges) {
64 for (
unsigned int & j : _edge) {
65 nnode = max(nnode, j);
69 if ( !_edges.empty() )
77 s <<
"Graph with " << rhs.
Nedges() <<
" edges and " << rhs.
Nvertices() <<
" vertices" << endl;
79 const auto &edges = rhs._edges;
80 s <<
"\n -- Edges --\n";
81 for (
size_t k = 0; k < edges.size(); ++k) {
83 for (
unsigned int j : edges[k]) {
89 s <<
"\n -- Vertices --\n";
90 for (
auto v : rhs._vertices) {
101 const auto ip = find(_edges.cbegin(), _edges.cend(), Edge{v1, v2});
102 bool edgeFound(ip == _edges.cend());
104 _edges.push_back(Edge{v1, v2});
105 _vertices.insert(v1);
106 _maxvert = max(_maxvert, v1);
107 _vertices.insert(v2);
108 _maxvert = max(_maxvert, v2);
115 const auto ip = find(_edges.cbegin(), _edges.cend(), e);
116 bool edgeFound(ip != _edges.cend());
119 DetermineNumberVertices();
126 return Delete(Edge{v1, v2});
131 for (
const auto &e : v) {
132 const auto ip = find(_edges.cbegin(), _edges.cend(), e);
133 bool edgeFound(ip != _edges.cend());
138 DetermineNumberVertices();
size_t Max_vertex() const
bool Delete(unsigned int v1, unsigned int v2)
Removes one directed edge (v1, v2) from the graph. The method add only edges that not already contain...
graph(const std::string &file_name)
Reads edges for graph from file.
bool Append(unsigned int v1, unsigned int v2)
Appends one directed edge to the graph. The method add only edges that not already contained in the g...
std::vector< std::vector< unsigned int > > get_node2nodes() const
ostream & operator<<(ostream &s, graph const &rhs)