0
4
0
| ... | ... |
@@ -1302,24 +1302,44 @@ |
| 1302 | 1302 |
} |
| 1303 | 1303 |
erase(b); |
| 1304 | 1304 |
} |
| 1305 | 1305 |
|
| 1306 | 1306 |
///Clear the graph. |
| 1307 | 1307 |
|
| 1308 | 1308 |
///This function erases all nodes and arcs from the graph. |
| 1309 | 1309 |
/// |
| 1310 | 1310 |
void clear() {
|
| 1311 | 1311 |
Parent::clear(); |
| 1312 | 1312 |
} |
| 1313 | 1313 |
|
| 1314 |
/// Reserve memory for nodes. |
|
| 1315 |
|
|
| 1316 |
/// Using this function, it is possible to avoid superfluous memory |
|
| 1317 |
/// allocation: if you know that the graph you want to build will |
|
| 1318 |
/// be large (e.g. it will contain millions of nodes and/or edges), |
|
| 1319 |
/// then it is worth reserving space for this amount before starting |
|
| 1320 |
/// to build the graph. |
|
| 1321 |
/// \sa reserveEdge() |
|
| 1322 |
void reserveNode(int n) { nodes.reserve(n); };
|
|
| 1323 |
|
|
| 1324 |
/// Reserve memory for edges. |
|
| 1325 |
|
|
| 1326 |
/// Using this function, it is possible to avoid superfluous memory |
|
| 1327 |
/// allocation: if you know that the graph you want to build will |
|
| 1328 |
/// be large (e.g. it will contain millions of nodes and/or edges), |
|
| 1329 |
/// then it is worth reserving space for this amount before starting |
|
| 1330 |
/// to build the graph. |
|
| 1331 |
/// \sa reserveNode() |
|
| 1332 |
void reserveEdge(int m) { arcs.reserve(2 * m); };
|
|
| 1333 |
|
|
| 1314 | 1334 |
/// \brief Class to make a snapshot of the graph and restore |
| 1315 | 1335 |
/// it later. |
| 1316 | 1336 |
/// |
| 1317 | 1337 |
/// Class to make a snapshot of the graph and restore it later. |
| 1318 | 1338 |
/// |
| 1319 | 1339 |
/// The newly added nodes and edges can be removed |
| 1320 | 1340 |
/// using the restore() function. |
| 1321 | 1341 |
/// |
| 1322 | 1342 |
/// \note After a state is restored, you cannot restore a later state, |
| 1323 | 1343 |
/// i.e. you cannot add the removed nodes and edges again using |
| 1324 | 1344 |
/// another Snapshot instance. |
| 1325 | 1345 |
/// |
| ... | ... |
@@ -682,24 +682,44 @@ |
| 682 | 682 |
/// \warning A removed arc (using Snapshot) could become valid again |
| 683 | 683 |
/// if new edges are added to the graph. |
| 684 | 684 |
bool valid(Arc a) const { return Parent::valid(a); }
|
| 685 | 685 |
|
| 686 | 686 |
///Clear the graph. |
| 687 | 687 |
|
| 688 | 688 |
///This function erases all nodes and arcs from the graph. |
| 689 | 689 |
/// |
| 690 | 690 |
void clear() {
|
| 691 | 691 |
Parent::clear(); |
| 692 | 692 |
} |
| 693 | 693 |
|
| 694 |
/// Reserve memory for nodes. |
|
| 695 |
|
|
| 696 |
/// Using this function, it is possible to avoid superfluous memory |
|
| 697 |
/// allocation: if you know that the graph you want to build will |
|
| 698 |
/// be large (e.g. it will contain millions of nodes and/or edges), |
|
| 699 |
/// then it is worth reserving space for this amount before starting |
|
| 700 |
/// to build the graph. |
|
| 701 |
/// \sa reserveEdge() |
|
| 702 |
void reserveNode(int n) { nodes.reserve(n); };
|
|
| 703 |
|
|
| 704 |
/// Reserve memory for edges. |
|
| 705 |
|
|
| 706 |
/// Using this function, it is possible to avoid superfluous memory |
|
| 707 |
/// allocation: if you know that the graph you want to build will |
|
| 708 |
/// be large (e.g. it will contain millions of nodes and/or edges), |
|
| 709 |
/// then it is worth reserving space for this amount before starting |
|
| 710 |
/// to build the graph. |
|
| 711 |
/// \sa reserveNode() |
|
| 712 |
void reserveEdge(int m) { arcs.reserve(2 * m); };
|
|
| 713 |
|
|
| 694 | 714 |
public: |
| 695 | 715 |
|
| 696 | 716 |
class Snapshot; |
| 697 | 717 |
|
| 698 | 718 |
protected: |
| 699 | 719 |
|
| 700 | 720 |
void saveSnapshot(Snapshot &s) |
| 701 | 721 |
{
|
| 702 | 722 |
s._graph = this; |
| 703 | 723 |
s.node_num = nodes.size(); |
| 704 | 724 |
s.arc_num = arcs.size(); |
| 705 | 725 |
} |
| ... | ... |
@@ -26,24 +26,27 @@ |
| 26 | 26 |
|
| 27 | 27 |
using namespace lemon; |
| 28 | 28 |
using namespace lemon::concepts; |
| 29 | 29 |
|
| 30 | 30 |
template <class Digraph> |
| 31 | 31 |
void checkDigraphBuild() {
|
| 32 | 32 |
TEMPLATE_DIGRAPH_TYPEDEFS(Digraph); |
| 33 | 33 |
Digraph G; |
| 34 | 34 |
|
| 35 | 35 |
checkGraphNodeList(G, 0); |
| 36 | 36 |
checkGraphArcList(G, 0); |
| 37 | 37 |
|
| 38 |
G.reserveNode(3); |
|
| 39 |
G.reserveArc(4); |
|
| 40 |
|
|
| 38 | 41 |
Node |
| 39 | 42 |
n1 = G.addNode(), |
| 40 | 43 |
n2 = G.addNode(), |
| 41 | 44 |
n3 = G.addNode(); |
| 42 | 45 |
checkGraphNodeList(G, 3); |
| 43 | 46 |
checkGraphArcList(G, 0); |
| 44 | 47 |
|
| 45 | 48 |
Arc a1 = G.addArc(n1, n2); |
| 46 | 49 |
check(G.source(a1) == n1 && G.target(a1) == n2, "Wrong arc"); |
| 47 | 50 |
checkGraphNodeList(G, 3); |
| 48 | 51 |
checkGraphArcList(G, 1); |
| 49 | 52 |
| ... | ... |
@@ -29,24 +29,27 @@ |
| 29 | 29 |
using namespace lemon; |
| 30 | 30 |
using namespace lemon::concepts; |
| 31 | 31 |
|
| 32 | 32 |
template <class Graph> |
| 33 | 33 |
void checkGraphBuild() {
|
| 34 | 34 |
TEMPLATE_GRAPH_TYPEDEFS(Graph); |
| 35 | 35 |
|
| 36 | 36 |
Graph G; |
| 37 | 37 |
checkGraphNodeList(G, 0); |
| 38 | 38 |
checkGraphEdgeList(G, 0); |
| 39 | 39 |
checkGraphArcList(G, 0); |
| 40 | 40 |
|
| 41 |
G.reserveNode(3); |
|
| 42 |
G.reserveEdge(3); |
|
| 43 |
|
|
| 41 | 44 |
Node |
| 42 | 45 |
n1 = G.addNode(), |
| 43 | 46 |
n2 = G.addNode(), |
| 44 | 47 |
n3 = G.addNode(); |
| 45 | 48 |
checkGraphNodeList(G, 3); |
| 46 | 49 |
checkGraphEdgeList(G, 0); |
| 47 | 50 |
checkGraphArcList(G, 0); |
| 48 | 51 |
|
| 49 | 52 |
Edge e1 = G.addEdge(n1, n2); |
| 50 | 53 |
check((G.u(e1) == n1 && G.v(e1) == n2) || (G.u(e1) == n2 && G.v(e1) == n1), |
| 51 | 54 |
"Wrong edge"); |
| 52 | 55 |
|
0 comments (0 inline)