Compare commits
79 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 7913228c9d | |||
| 45b600b665 | |||
| 41dc6bc8ec | |||
| 09914913d8 | |||
| 38c0346d50 | |||
| d59e865d77 | |||
| 06184c0bfe | |||
| 15d1ce3c5b | |||
| 96e152f8e5 | |||
| 10035bd207 | |||
| d311ba1ccf | |||
| 3977e06d83 | |||
| e758310566 | |||
| 3b503707ad | |||
| 03b9b5bdfd | |||
| da0610c99b | |||
| db5c1b317c | |||
| 05a9ed31da | |||
| c1ccf73891 | |||
| 281bb94e51 | |||
| 7cb9113a61 | |||
| 56d3e72155 | |||
| 7e54f9997d | |||
| 2796c0a147 | |||
| b50fe850a2 | |||
| 529934f827 | |||
| caa8fd4568 | |||
| c7a6fdc418 | |||
| 0ce03767a8 | |||
| 8321c79d20 | |||
| 589584b4e4 | |||
| f0faaabca1 | |||
| 4b07d0b469 | |||
| cdc7f4f75b | |||
| 9249b640e4 | |||
| c0756b5ebf | |||
| a14f8df86c | |||
| 7f94230dca | |||
| ecf83843e7 | |||
| 13cea9c32b | |||
| 50cb642e94 | |||
| c112afbbad | |||
| b1a4f32b1f | |||
| f9e930f006 | |||
| a4e6f4dd78 | |||
| 753c88c484 | |||
| fa7ef591c2 | |||
| eec98072db | |||
| 48b63adf44 | |||
| b0214ec131 | |||
| ba0cf281c9 | |||
| b5171962bf | |||
| 5d8c6fd1d3 | |||
| 59aba774bc | |||
| 0eabc7ceb5 | |||
| 8729cc8a7c | |||
| 5bfc793f06 | |||
| b357a88ecd | |||
| a089d3bc35 | |||
| 04c1c99051 | |||
| d6b7a717db | |||
| b6d9a72999 | |||
| 6f5964a6bd | |||
| d155583ac2 | |||
| 6a2d45ae20 | |||
| 0e1414f46e | |||
| 189c113f04 | |||
| add3546f94 | |||
| 6416fecc90 | |||
| 8ca2084c9d | |||
| 5b84005bac | |||
| 6a33285342 | |||
| 379383b62a | |||
| a5b6a097e6 | |||
| 316445d7c9 | |||
| ed98931118 | |||
| daa2e69db1 | |||
| 6a559d3b73 | |||
| b31f6de077 |
@@ -0,0 +1,16 @@
|
||||
BasedOnStyle: WebKit
|
||||
Standard: Cpp11
|
||||
AlignAfterOpenBracket: false
|
||||
AlignEscapedNewlinesLeft: true
|
||||
AlwaysBreakAfterDefinitionReturnType: None
|
||||
BreakBeforeBraces: Allman
|
||||
BreakConstructorInitializersBeforeComma: false
|
||||
ColumnLimit: 80
|
||||
ConstructorInitializerAllOnOneLineOrOnePerLine: true
|
||||
ConstructorInitializerIndentWidth: 0
|
||||
IndentCaseLabels: false
|
||||
SortIncludes: false
|
||||
AlignTrailingComments: false
|
||||
|
||||
SpacesInAngles: true
|
||||
|
||||
@@ -0,0 +1,65 @@
|
||||
# Use, modification, and distribution are
|
||||
# subject to the Boost Software License, Version 1.0. (See accompanying
|
||||
# file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||
#
|
||||
# Mael Valais, 2016
|
||||
# This travis file has been inspired from boostorg/geometry/circle.yml.
|
||||
#
|
||||
# This file is intended to make use of travis-ci, a continuous integration
|
||||
# service. The purpose is to build and run the tests on the graph module
|
||||
# on every push, and be able to know if those commits are "clean" or if
|
||||
# they break the build.
|
||||
#
|
||||
|
||||
# I think that we shouldn't restrict on branches: PRs must also be tested
|
||||
# So for now, I disabled the "only on branches" feature
|
||||
#branches:
|
||||
# only:
|
||||
# - master
|
||||
# - develop
|
||||
# - test
|
||||
|
||||
language: cpp
|
||||
compiler: gcc
|
||||
|
||||
env:
|
||||
global:
|
||||
- BOOST_BRANCH=$([[ "$TRAVIS_BRANCH" = "master" ]] && echo master || echo develop)
|
||||
- BOOST=boost-local # must be different from graph/boost dir name
|
||||
addons:
|
||||
apt:
|
||||
sources: ubuntu-toolchain-r-test
|
||||
packages: g++-4.8
|
||||
|
||||
before_install:
|
||||
# Clone boost repository
|
||||
- cd
|
||||
- mkdir $BOOST && cd $BOOST
|
||||
- git init .
|
||||
- git remote add --no-tags -t $BOOST_BRANCH origin https://github.com/boostorg/boost.git
|
||||
- git fetch --depth=1
|
||||
- git checkout $BOOST_BRANCH
|
||||
- git submodule update --init --merge
|
||||
- git remote set-branches --add origin $BOOST_BRANCH
|
||||
- git pull --recurse-submodules
|
||||
- git submodule update --init
|
||||
- git checkout $BOOST_BRANCH
|
||||
- git submodule foreach "git reset --quiet --hard; git clean -fxd"
|
||||
- git reset --hard; git clean -fxd
|
||||
- git status
|
||||
|
||||
# replace the content of the library with the currently tested repo
|
||||
- cd && pwd && ls
|
||||
- rm -rf $BOOST/libs/graph
|
||||
- cd $TRAVIS_BUILD_DIR && cd ..
|
||||
- mv graph $HOME/$BOOST/libs/
|
||||
|
||||
# build b2 and create headers
|
||||
- cd && cd $BOOST
|
||||
- ./bootstrap.sh
|
||||
- ./b2 headers
|
||||
|
||||
# This part is meant for unit tests
|
||||
script:
|
||||
- cd $HOME/$BOOST/libs/graph/test
|
||||
- ../../../b2 toolset=gcc-4.8 cxxflags=-std=c++11
|
||||
@@ -0,0 +1,44 @@
|
||||
Boost Graph Library
|
||||
===================
|
||||
|
||||
A generic interface for traversing graphs, using C++ templates.
|
||||
|
||||
The full documentation is available on [boost.org](http://www.boost.org/doc/libs/release/libs/graph/doc/index.html).
|
||||
|
||||
## Support, bugs and feature requests ##
|
||||
|
||||
Bugs and feature requests can be reported through the [Trac issue tracker](https://svn.boost.org/trac/boost/query?component=graph&desc=1&order=id)
|
||||
(see [open issues](https://svn.boost.org/trac/boost/query?status=!closed&component=graph&desc=1&order=id) and
|
||||
[closed issues](https://svn.boost.org/trac/boost/query?status=closed&component=graph&col=id&col=summary&col=status&col=owner&col=type&col=milestone&col=version&desc=1&order=id)). [Here](http://lists.boost.org/Archives/boost/2015/04/221780.php) is why Trac is still in use.
|
||||
|
||||
You can submit your changes through a [pull request](https://github.com/boostorg/graph/pulls). One of the maintainers will take a look (remember that it can take some time).
|
||||
|
||||
There is no mailing-list specific to Boost Graph, although you can use the general-purpose Boost [mailing-list](http://lists.boost.org/mailman/listinfo.cgi/boost-users) using the tag [graph].
|
||||
|
||||
|
||||
## Development ##
|
||||
|
||||
Clone the whole boost project, which includes the individual Boost projects as submodules ([see boost+git doc](https://github.com/boostorg/boost/wiki/Getting-Started)):
|
||||
|
||||
git clone https://github.com/boostorg/boost
|
||||
cd boost
|
||||
git submodule update --init
|
||||
|
||||
The Boost Graph Library is located in `libs/graph/`.
|
||||
|
||||
Boost Graph Library is mostly made of headers but also contains some compiled components. Here are the build commands:
|
||||
|
||||
./bootstrap.sh <- compile b2
|
||||
./b2 headers <- just installs headers
|
||||
./b2 <- build compiled components
|
||||
|
||||
**Note:** The Boost Graph Library cannot currently be built outside of Boost itself.
|
||||
|
||||
### Running tests ###
|
||||
First, make sure you are in `libs/graph/test`.
|
||||
You can either run all the 300+ tests listed in `Jamfile.v2` or run a single test:
|
||||
|
||||
../../../b2 <- run all tests
|
||||
../../../b2 cycle_canceling_test <- single test
|
||||
|
||||
You can also check the [regression tests reports](http://beta.boost.org/development/tests/develop/developer/graph.html).
|
||||
@@ -112,7 +112,6 @@ The <TT>adjacent_vertices()</TT> function must return in constant time.
|
||||
typedef typename boost::graph_traits<G>::adjacency_iterator
|
||||
adjacency_iterator;
|
||||
void constraints() {
|
||||
BOOST_CONCEPT_ASSERT(( IncidenceGraphConcept<G> ));
|
||||
BOOST_CONCEPT_ASSERT(( MultiPassInputIteratorConcept<adjacency_iterator> ));
|
||||
|
||||
p = adjacent_vertices(v, g);
|
||||
|
||||
@@ -149,16 +149,21 @@ undirected graphs).
|
||||
BOOST_CONCEPT_ASSERT(( MultiPassInputIteratorConcept<in_edge_iterator> ));
|
||||
|
||||
p = in_edges(v, g);
|
||||
n = in_degree(v, g);
|
||||
n = degree(v, g);
|
||||
e = *p.first;
|
||||
const_constraints(g);
|
||||
}
|
||||
void const_constraints(const G& g) {
|
||||
p = in_edges(v, g);
|
||||
n = in_degree(v, g);
|
||||
n = degree(v, g);
|
||||
e = *p.first;
|
||||
}
|
||||
std::pair<in_edge_iterator, in_edge_iterator> p;
|
||||
typename boost::graph_traits<G>::vertex_descriptor v;
|
||||
typename boost::graph_traits<G>::edge_descriptor e;
|
||||
typename boost::graph_traits<G>::degree_size_type n;
|
||||
G g;
|
||||
};
|
||||
</PRE>
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<HTML>
|
||||
<!--
|
||||
Copyright (c) Jeremy Siek 2000
|
||||
|
||||
|
||||
Distributed under the Boost Software License, Version 1.0.
|
||||
(See accompanying file LICENSE_1_0.txt or copy at
|
||||
http://www.boost.org/LICENSE_1_0.txt)
|
||||
@@ -459,7 +459,7 @@ and<br>
|
||||
<br><br>
|
||||
This describes whether the graph class allows the insertion of
|
||||
parallel edges (edges with the same source and target). The two tags
|
||||
are <TT>allow_parallel_edge-_tag</TT> and
|
||||
are <TT>allow_parallel_edge_tag</TT> and
|
||||
<TT>disallow_parallel_edge_tag</TT>. The
|
||||
<TT>setS</TT> and <TT>hash_setS</TT> variants disallow
|
||||
parallel edges while the others allow parallel edges.
|
||||
@@ -474,9 +474,9 @@ The type used for dealing with the number of vertices in the graph.
|
||||
|
||||
<hr>
|
||||
|
||||
<tt>graph_traits<adjacency_list>::edge_size_type</tt><br>
|
||||
<tt>graph_traits<adjacency_list>::edges_size_type</tt><br>
|
||||
and<br>
|
||||
<tt>adjacency_list_traits<OutEdgeList, VertexList, Directed_list, EdgeList>::edge_size_type</tt><br>
|
||||
<tt>adjacency_list_traits<OutEdgeList, VertexList, Directed_list, EdgeList>::edges_size_type</tt><br>
|
||||
<br><br>
|
||||
The type used for dealing with the number of edges in the graph.
|
||||
|
||||
@@ -836,7 +836,7 @@ add_edge(vertex_descriptor u, vertex_descriptor v,
|
||||
</pre>
|
||||
Adds edge <i>(u,v)</i> to the graph and attaches <TT>p</TT> as the
|
||||
value of the edge's internal property storage. Also see the previous
|
||||
<TT>add_edge()</TT> member function for more details.
|
||||
<TT>add_edge()</TT> non-member function for more details.
|
||||
|
||||
<hr>
|
||||
|
||||
|
||||
@@ -120,7 +120,7 @@ IN: <tt>VertexIndexMap vertex_index</tt>
|
||||
<b>Default:</b> <tt>get(vertex_index, g)</tt>.
|
||||
Note: if you use this default, make sure your graph has
|
||||
an internal <tt>vertex_index</tt> property. For example,
|
||||
<tt>adjacenty_list</tt> with <tt>VertexList=listS</tt> does
|
||||
<tt>adjacency_list</tt> with <tt>VertexList=listS</tt> does
|
||||
not have an internal <tt>vertex_index</tt> property.<br>
|
||||
<b>Python</b>: Unsupported parameter.
|
||||
</blockquote>
|
||||
|
||||
@@ -266,7 +266,7 @@ IN: <tt>vertex_index_map(VertexIndexMap vertex_index)</tt>
|
||||
<b>Default:</b> <tt>get(vertex_index, g)</tt>.
|
||||
Note: if you use this default, make sure your graph has
|
||||
an internal <tt>vertex_index</tt> property. For example,
|
||||
<tt>adjacenty_list</tt> with <tt>VertexList=listS</tt> does
|
||||
<tt>adjacency_list</tt> with <tt>VertexList=listS</tt> does
|
||||
not have an internal <tt>vertex_index</tt> property.<br>
|
||||
<b>Python</b>: Unsupported parameter.
|
||||
</blockquote>
|
||||
|
||||
@@ -223,7 +223,7 @@ IN: <tt>vertex_index_map(VertexIndexMap i_map)</tt>
|
||||
<b>Default:</b> <tt>get(vertex_index, g)</tt>.
|
||||
Note: if you use this default, make sure your graph has
|
||||
an internal <tt>vertex_index</tt> property. For example,
|
||||
<tt>adjacenty_list</tt> with <tt>VertexList=listS</tt> does
|
||||
<tt>adjacency_list</tt> with <tt>VertexList=listS</tt> does
|
||||
not have an internal <tt>vertex_index</tt> property.<br>
|
||||
|
||||
<b>Python</b>: Unsupported parameter.
|
||||
@@ -305,7 +305,7 @@ The example in <a
|
||||
href="../example/bfs-example.cpp"><TT>example/bfs-example.cpp</TT></a>
|
||||
demonstrates using the BGL Breadth-first search algorithm on the graph
|
||||
from <A HREF="./graph_theory_review.html#fig:bfs-example">Figure
|
||||
5</A>. The file
|
||||
6</A>. The file
|
||||
<a href="../example/bfs-example2.cpp"><TT>example/bfs-example2.cpp</TT></a>
|
||||
contains the same example, except that the <tt>adacency_list</tt>
|
||||
class used has <tt>VertexList</tt> and <tt>EdgeList</tt> set
|
||||
|
||||
@@ -117,7 +117,7 @@ IN: <tt>vertex_index_map(VertexIndexMap i_map)</tt>
|
||||
<b>Default:</b> <tt>get(vertex_index, g)</tt>.
|
||||
Note: if you use this default, make sure your graph has
|
||||
an internal <tt>vertex_index</tt> property. For example,
|
||||
<tt>adjacenty_list</tt> with <tt>VertexList=listS</tt> does
|
||||
<tt>adjacency_list</tt> with <tt>VertexList=listS</tt> does
|
||||
not have an internal <tt>vertex_index</tt> property.<br>
|
||||
|
||||
<b>Python</b>: Unsupported parameter.
|
||||
|
||||
@@ -80,7 +80,7 @@ integers in the half-open range <tt>[0,num_vertices(G))</tt>.<br>
|
||||
<b>Default:</b> <tt>get(vertex_index, G)</tt>.
|
||||
Note: if you use this default, make sure your graph has
|
||||
an internal <tt>vertex_index</tt> property. For example,
|
||||
<tt>adjacenty_list</tt> with <tt>VertexList=listS</tt> does
|
||||
<tt>adjacency_list</tt> with <tt>VertexList=listS</tt> does
|
||||
not have an internal <tt>vertex_index</tt> property.
|
||||
</blockquote>
|
||||
|
||||
|
||||
@@ -173,7 +173,7 @@ IN: <tt>vertex_index_map(VertexIndexMap i_map)</tt>
|
||||
<b>Default:</b> <tt>get(vertex_index, g)</tt>
|
||||
Note: if you use this default, make sure your graph has
|
||||
an internal <tt>vertex_index</tt> property. For example,
|
||||
<tt>adjacenty_list</tt> with <tt>VertexList=listS</tt> does
|
||||
<tt>adjacency_list</tt> with <tt>VertexList=listS</tt> does
|
||||
not have an internal <tt>vertex_index</tt> property.
|
||||
</blockquote>
|
||||
|
||||
|
||||
@@ -118,7 +118,7 @@ IN: <tt>vertex_index_map(VertexIndexMap i_map)</tt>
|
||||
<b>Default:</b> <tt>get(vertex_index, g)</tt>.
|
||||
Note: if you use this default, make sure your graph has
|
||||
an internal <tt>vertex_index</tt> property. For example,
|
||||
<tt>adjacenty_list</tt> with <tt>VertexList=listS</tt> does
|
||||
<tt>adjacency_list</tt> with <tt>VertexList=listS</tt> does
|
||||
not have an internal <tt>vertex_index</tt> property.<br>
|
||||
|
||||
<b>Python</b>: Unsupported parameter.
|
||||
|
||||
@@ -239,7 +239,7 @@ IN: <tt>vertex_index_map(VertexIndexMap i_map)</tt>
|
||||
<b>Default:</b> <tt>get(vertex_index, g)</tt>.
|
||||
Note: if you use this default, make sure your graph has
|
||||
an internal <tt>vertex_index</tt> property. For example,
|
||||
<tt>adjacenty_list</tt> with <tt>VertexList=listS</tt> does
|
||||
<tt>adjacency_list</tt> with <tt>VertexList=listS</tt> does
|
||||
not have an internal <tt>vertex_index</tt> property.
|
||||
<br>
|
||||
|
||||
|
||||
@@ -208,7 +208,7 @@ IN: <tt>index_map(VertexIndexMap index_map)</tt>
|
||||
<b>Default:</b> <tt>get(vertex_index, graph)</tt>.
|
||||
Note: if you use this default, make sure your graph has
|
||||
an internal <tt>vertex_index</tt> property. For example,
|
||||
<tt>adjacenty_list</tt> with <tt>VertexList=listS</tt> does
|
||||
<tt>adjacency_list</tt> with <tt>VertexList=listS</tt> does
|
||||
not have an internal <tt>vertex_index</tt> property.
|
||||
<br>
|
||||
</blockquote>
|
||||
|
||||
@@ -6,14 +6,14 @@
|
||||
(See accompanying file LICENSE_1_0.txt or copy at
|
||||
http://www.boost.org/LICENSE_1_0.txt)
|
||||
-->
|
||||
|
||||
|
||||
<Head>
|
||||
|
||||
|
||||
<Head>
|
||||
<Title>Boost Graph Library: Edge Coloring</Title>
|
||||
<BODY BGCOLOR="#ffffff" LINK="#0000ee" TEXT="#000000" VLINK="#551a8b"
|
||||
ALINK="#ff0000">
|
||||
<IMG SRC="../../../boost.png"
|
||||
ALT="C++ Boost" width="277" height="86">
|
||||
<BODY BGCOLOR="#ffffff" LINK="#0000ee" TEXT="#000000" VLINK="#551a8b"
|
||||
ALINK="#ff0000">
|
||||
<IMG SRC="../../../boost.png"
|
||||
ALT="C++ Boost" width="277" height="86">
|
||||
|
||||
<BR Clear>
|
||||
|
||||
@@ -46,7 +46,7 @@
|
||||
</pre>
|
||||
|
||||
<p>Computes an edge coloring for the vertices in the graph, using
|
||||
an algorithm proposed by Mista et al. []. Given edges ordered
|
||||
an algorithm proposed by Misra et al. []. Given edges ordered
|
||||
e<sub>1</sub>, e<sub>2</sub>, ..., e<sub>n</sub> it assignes a
|
||||
colors c<sub>1</sub>, c<sub>2</sub>, ..., c<sub>n</sub> in a way
|
||||
that no vertex connects with 2 edges of the same color. Furthermore
|
||||
@@ -95,4 +95,4 @@ Maciej Piechotka (<A HREF="mailto:uzytkownik2@gmail.com">uzytkownik2@gmail.com</
|
||||
</TD></TR></TABLE>
|
||||
|
||||
</BODY>
|
||||
</HTML>
|
||||
</HTML>
|
||||
|
||||
@@ -195,7 +195,7 @@ IN: <tt>vertex_index_map(VertexIndexMap i_map)</tt>
|
||||
<b>Default:</b> <tt>get(vertex_index, g)</tt>
|
||||
Note: if you use this default, make sure your graph has
|
||||
an internal <tt>vertex_index</tt> property. For example,
|
||||
<tt>adjacenty_list</tt> with <tt>VertexList=listS</tt> does
|
||||
<tt>adjacency_list</tt> with <tt>VertexList=listS</tt> does
|
||||
not have an internal <tt>vertex_index</tt> property.
|
||||
</blockquote>
|
||||
|
||||
|
||||
|
Before Width: | Height: | Size: 8.0 KiB After Width: | Height: | Size: 8.0 KiB |
|
Before Width: | Height: | Size: 3.7 KiB After Width: | Height: | Size: 3.7 KiB |
|
Before Width: | Height: | Size: 2.9 KiB After Width: | Height: | Size: 2.9 KiB |
|
Before Width: | Height: | Size: 7.7 KiB After Width: | Height: | Size: 7.7 KiB |
|
Before Width: | Height: | Size: 8.3 KiB After Width: | Height: | Size: 8.3 KiB |
|
Before Width: | Height: | Size: 8.8 KiB After Width: | Height: | Size: 8.8 KiB |
|
Before Width: | Height: | Size: 69 KiB After Width: | Height: | Size: 69 KiB |
@@ -257,7 +257,7 @@ The type used for dealing with the number of vertices in the graph.
|
||||
|
||||
<hr>
|
||||
|
||||
<tt>graph_traits<filtered_graph>::edge_size_type</tt>
|
||||
<tt>graph_traits<filtered_graph>::edges_size_type</tt>
|
||||
<br><br>
|
||||
The type used for dealing with the number of edges in the graph.
|
||||
|
||||
|
||||
@@ -198,7 +198,7 @@ IN: <tt>vertex_index_map(VertexIndexMap i_map)</tt>
|
||||
<b>Default:</b> <tt>get(vertex_index, g)</tt>
|
||||
Note: if you use this default, make sure your graph has
|
||||
an internal <tt>vertex_index</tt> property. For example,
|
||||
<tt>adjacenty_list</tt> with <tt>VertexList=listS</tt> does
|
||||
<tt>adjacency_list</tt> with <tt>VertexList=listS</tt> does
|
||||
not have an internal <tt>vertex_index</tt> property.
|
||||
<br>
|
||||
<b>Python:</b> Unsupported parameter.
|
||||
|
||||
@@ -218,7 +218,7 @@ vertices in the graph.
|
||||
|
||||
<tr>
|
||||
<td><tt>
|
||||
edge_size_type
|
||||
edges_size_type
|
||||
</tt></td>
|
||||
<td>
|
||||
The unsigned integer type used for representing the number of
|
||||
|
||||
@@ -171,7 +171,7 @@ IN: <tt>VertexIndexMap vertex_index_map</tt>
|
||||
<b>Default:</b> <tt>get(vertex_index, g)</tt>
|
||||
Note: if you use this default, make sure your graph has
|
||||
an internal <tt>vertex_index</tt> property. For example,
|
||||
<tt>adjacenty_list</tt> with <tt>VertexList=listS</tt> does
|
||||
<tt>adjacency_list</tt> with <tt>VertexList=listS</tt> does
|
||||
not have an internal <tt>vertex_index</tt> property.
|
||||
</blockquote>
|
||||
|
||||
|
||||
@@ -1,3 +1,11 @@
|
||||
<!--
|
||||
Copyright (c) 2013-2015 Louis Dionne
|
||||
|
||||
Distributed under the Boost Software License, Version 1.0.
|
||||
(See accompanying file LICENSE_1_0.txt or copy at
|
||||
http://www.boost.org/LICENSE_1_0.txt)
|
||||
-->
|
||||
|
||||
<p><body bgcolor="#ffffff" link="#0000ee" text="#000000" vlink="#551a8b" alink="#ff0000"></p>
|
||||
|
||||
<p><img src="../../../boost.png" alt="C++ Boost" /></p>
|
||||
@@ -17,7 +25,7 @@ self-loops and redundant circuits caused by parallel edges are enumerated too.
|
||||
edges are not desired.</p>
|
||||
|
||||
<p>The algorithm is described in detail in
|
||||
<a href="http://www.massey.ac.nz/~kahawick/cstn/013/cstn-013.pdf">http://www.massey.ac.nz/~kahawick/cstn/013/cstn-013.pdf</a>.</p>
|
||||
<a href="http://complexity.massey.ac.nz/cstn/013/cstn-013.pdf">http://complexity.massey.ac.nz/cstn/013/cstn-013.pdf</a>.</p>
|
||||
|
||||
<h3 id="where-defined">Where defined</h3>
|
||||
|
||||
@@ -54,5 +62,5 @@ edges are not desired.</p>
|
||||
<hr />
|
||||
|
||||
<div class="footer">
|
||||
© 2013 Louis Dionne
|
||||
© 2013-2015 Louis Dionne
|
||||
</div>
|
||||
|
||||
@@ -1,53 +0,0 @@
|
||||
<body bgcolor="#ffffff" link="#0000ee" text="#000000" vlink="#551a8b" alink="#ff0000">
|
||||
|
||||

|
||||
|
||||
# `hawick_circuits`
|
||||
|
||||
template <typename Graph, typename Visitor, typename VertexIndexMap>
|
||||
void hawick_circuits(Graph const& graph, Visitor visitor, VertexIndexMap const& vim = get(vertex_index, graph));
|
||||
|
||||
template <typename Graph, typename Visitor, typename VertexIndexMap>
|
||||
void hawick_unique_circuits(Graph const& graph, Visitor visitor, VertexIndexMap const& vim = get(vertex_index, graph));
|
||||
|
||||
Enumerate all the elementary circuits in a directed multigraph. Specifically,
|
||||
self-loops and redundant circuits caused by parallel edges are enumerated too.
|
||||
`hawick_unique_circuits` may be used if redundant circuits caused by parallel
|
||||
edges are not desired.
|
||||
|
||||
The algorithm is described in detail in
|
||||
<http://www.massey.ac.nz/~kahawick/cstn/013/cstn-013.pdf>.
|
||||
|
||||
|
||||
### Where defined
|
||||
|
||||
[`#include <boost/graph/hawick_circuits.hpp>`](../../../boost/graph/hawick_circuits.hpp)
|
||||
|
||||
|
||||
### Parameters
|
||||
|
||||
__IN:__ `Graph const& graph`
|
||||
|
||||
> The graph on which the algorithm is to be performed. It must be a model of
|
||||
> the `VertexListGraph` and `AdjacencyGraph` concepts.
|
||||
|
||||
__IN:__ `Visitor visitor`
|
||||
|
||||
> The visitor that will be notified on each circuit found by the algorithm.
|
||||
> The `visitor.cycle(circuit, graph)` expression must be valid, with `circuit`
|
||||
> being a `const`-reference to a random access sequence of `vertex_descriptor`s.
|
||||
>
|
||||
> For example, if a circuit `u -> v -> w -> u` exists in the graph, the
|
||||
> visitor will be called with a sequence consisting of `(u, v, w)`.
|
||||
|
||||
__IN:__ `VertexIndexMap const& vim = get(vertex_index, graph)`
|
||||
|
||||
> A model of the `ReadablePropertyMap` concept mapping each `vertex_descriptor`
|
||||
> to an integer in the range `[0, num_vertices(graph))`. It defaults to using
|
||||
> the vertex index map provided by the `graph`.
|
||||
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
<div class="footer">
|
||||
© 2013 Louis Dionne
|
||||
</div>
|
||||
@@ -147,7 +147,7 @@ map.<br>
|
||||
<b>Default:</b> <tt>get(vertex_index, g1)</tt>
|
||||
Note: if you use this default, make sure your graph has
|
||||
an internal <tt>vertex_index</tt> property. For example,
|
||||
<tt>adjacenty_list</tt> with <tt>VertexList=listS</tt> does
|
||||
<tt>adjacency_list</tt> with <tt>VertexList=listS</tt> does
|
||||
not have an internal <tt>vertex_index</tt> property.
|
||||
<br>
|
||||
<b>Python</b>: Unsupported parameter.
|
||||
@@ -166,7 +166,7 @@ map.<br>
|
||||
<b>Default:</b> <tt>get(vertex_index, g2)</tt>
|
||||
Note: if you use this default, make sure your graph has
|
||||
an internal <tt>vertex_index</tt> property. For example,
|
||||
<tt>adjacenty_list</tt> with <tt>VertexList=listS</tt> does
|
||||
<tt>adjacency_list</tt> with <tt>VertexList=listS</tt> does
|
||||
not have an internal <tt>vertex_index</tt> property.
|
||||
<br>
|
||||
<b>Python</b>: Unsupported parameter.
|
||||
|
||||
@@ -246,7 +246,7 @@ As a mapping from vertices to index values between 0 and
|
||||
<b>Default</b>:<tt class="computeroutput">get(vertex_index,g)</tt>.
|
||||
Note: if you use this default, make sure your graph has
|
||||
an internal <tt>vertex_index</tt> property. For example,
|
||||
<tt>adjacenty_list</tt> with <tt>VertexList=listS</tt> does
|
||||
<tt>adjacency_list</tt> with <tt>VertexList=listS</tt> does
|
||||
not have an internal <tt>vertex_index</tt> property.
|
||||
<br>
|
||||
<b>Python</b>: Unsupported parameter.
|
||||
|
||||
@@ -166,7 +166,7 @@ IN: <tt>vertex_index_map(VertexIndexMap i_map)</tt>
|
||||
<b>Default:</b> <tt>get(vertex_index, g)</tt>
|
||||
Note: if you use this default, make sure your graph has
|
||||
an internal <tt>vertex_index</tt> property. For example,
|
||||
<tt>adjacenty_list</tt> with <tt>VertexList=listS</tt> does
|
||||
<tt>adjacency_list</tt> with <tt>VertexList=listS</tt> does
|
||||
not have an internal <tt>vertex_index</tt> property.
|
||||
<br>
|
||||
|
||||
|
||||
@@ -143,7 +143,7 @@ IN: <tt>VertexIndexMap indexmap</tt>
|
||||
<b>Default:</b> <tt>get(vertex_index, g)</tt>
|
||||
Note: if you use this default, make sure your graph has
|
||||
an internal <tt>vertex_index</tt> property. For example,
|
||||
<tt>adjacenty_list</tt> with <tt>VertexList=listS</tt> does
|
||||
<tt>adjacency_list</tt> with <tt>VertexList=listS</tt> does
|
||||
not have an internal <tt>vertex_index</tt> property.
|
||||
<br>
|
||||
</blockquote>
|
||||
|
||||
@@ -77,7 +77,7 @@ The time complexity is <i>O(V<sup>3</sup>)</i>.
|
||||
<H3>Where Defined</H3>
|
||||
|
||||
<P>
|
||||
<a href="../../../boost/graph/push_relabel_max_flow.hpp"><TT>boost/graph/preflow_push_max_flow.hpp</TT></a>
|
||||
<a href="../../../boost/graph/push_relabel_max_flow.hpp"><TT>boost/graph/push_relabel_max_flow.hpp</TT></a>
|
||||
|
||||
<P>
|
||||
|
||||
@@ -141,7 +141,7 @@ IN: <tt>vertex_index_map(VertexIndexMap index_map)</tt>
|
||||
<b>Default:</b> <tt>get(vertex_index, g)</tt>
|
||||
Note: if you use this default, make sure your graph has
|
||||
an internal <tt>vertex_index</tt> property. For example,
|
||||
<tt>adjacenty_list</tt> with <tt>VertexList=listS</tt> does
|
||||
<tt>adjacency_list</tt> with <tt>VertexList=listS</tt> does
|
||||
not have an internal <tt>vertex_index</tt> property.
|
||||
<br>
|
||||
</blockquote>
|
||||
|
||||
@@ -190,7 +190,7 @@ The type used for dealing with the number of vertices in the graph.
|
||||
|
||||
<hr>
|
||||
|
||||
<tt>graph_traits<reverse_graph>::edge_size_type</tt>
|
||||
<tt>graph_traits<reverse_graph>::edges_size_type</tt>
|
||||
<br><br>
|
||||
The type used for dealing with the number of edges in the graph.
|
||||
|
||||
|
||||
@@ -162,7 +162,7 @@ IN: <tt>vertex_index_map(VertexIndexMap i_map)</tt>
|
||||
<b>Default:</b> <tt>get(vertex_index, g)</tt>
|
||||
Note: if you use this default, make sure your graph has
|
||||
an internal <tt>vertex_index</tt> property. For example,
|
||||
<tt>adjacenty_list</tt> with <tt>VertexList=listS</tt> does
|
||||
<tt>adjacency_list</tt> with <tt>VertexList=listS</tt> does
|
||||
not have an internal <tt>vertex_index</tt> property.
|
||||
<br>
|
||||
|
||||
|
||||
@@ -1,17 +1,17 @@
|
||||
<HTML>
|
||||
<!--
|
||||
Copyright (c) Jeremy Siek 2000
|
||||
|
||||
|
||||
Distributed under the Boost Software License, Version 1.0.
|
||||
(See accompanying file LICENSE_1_0.txt or copy at
|
||||
http://www.boost.org/LICENSE_1_0.txt)
|
||||
-->
|
||||
<Head>
|
||||
<Title>Boost Graph Library: Subgraph</Title>
|
||||
<BODY BGCOLOR="#ffffff" LINK="#0000ee" TEXT="#000000" VLINK="#551a8b"
|
||||
ALINK="#ff0000">
|
||||
<IMG SRC="../../../boost.png"
|
||||
ALT="C++ Boost" width="277" height="86">
|
||||
<BODY BGCOLOR="#ffffff" LINK="#0000ee" TEXT="#000000" VLINK="#551a8b"
|
||||
ALINK="#ff0000">
|
||||
<IMG SRC="../../../boost.png"
|
||||
ALT="C++ Boost" width="277" height="86">
|
||||
|
||||
<BR Clear>
|
||||
|
||||
@@ -187,7 +187,7 @@ the underlying <tt>Graph</tt> type.
|
||||
<pre>
|
||||
graph_traits<subgraph>::vertex_descriptor
|
||||
</pre>
|
||||
The type for the vertex descriptors.
|
||||
The type for the vertex descriptors.
|
||||
(Required by <a href="Graph.html">Graph</a>.)
|
||||
|
||||
<hr>
|
||||
@@ -195,7 +195,7 @@ graph_traits<subgraph>::vertex_descriptor
|
||||
<pre>
|
||||
graph_traits<subgraph>::edge_descriptor
|
||||
</pre>
|
||||
The type for the edge descriptors.
|
||||
The type for the edge descriptors.
|
||||
(Required by <a href="Graph.html">Graph</a>.)
|
||||
|
||||
<hr>
|
||||
@@ -203,7 +203,7 @@ graph_traits<subgraph>::edge_descriptor
|
||||
<pre>
|
||||
graph_traits<subgraph>::vertex_iterator
|
||||
</pre>
|
||||
The type for the iterators returned by <tt>vertices</tt>.
|
||||
The type for the iterators returned by <tt>vertices</tt>.
|
||||
(Required by <a href="VertexListGraph.html">VertexListGraph</a>.)
|
||||
|
||||
<hr>
|
||||
@@ -211,14 +211,14 @@ graph_traits<subgraph>::vertex_iterator
|
||||
<pre>
|
||||
graph_traits<subgraph>::edge_iterator
|
||||
</pre>
|
||||
The type for the iterators returned by <tt>edges</tt>.
|
||||
The type for the iterators returned by <tt>edges</tt>.
|
||||
(Required by <a href="EdgeListGraph.html">EdgeListGraph</a>.)
|
||||
|
||||
<hr>
|
||||
<pre>
|
||||
graph_traits<subgraph>::out_edge_iterator
|
||||
</pre>
|
||||
The type for the iterators returned by <tt>out_edges</tt>.
|
||||
The type for the iterators returned by <tt>out_edges</tt>.
|
||||
(Required by <a href="IncidenceGraph.html">IncidenceGraph</a>.)
|
||||
|
||||
<hr>
|
||||
@@ -226,14 +226,14 @@ graph_traits<subgraph>::out_edge_iterator
|
||||
graph_traits<subgraph>::in_edge_iterator
|
||||
</pre>
|
||||
The <tt>in_edge_iterator</tt> is the
|
||||
iterator type returned by the <tt>in_edges</tt> function.
|
||||
iterator type returned by the <tt>in_edges</tt> function.
|
||||
(Required by <a href="BidirectionalGraph.html">BidirectionalGraph</a>.)
|
||||
|
||||
<hr>
|
||||
<pre>
|
||||
graph_traits<subgraph>::adjacency_iterator
|
||||
</pre>
|
||||
The type for the iterators returned by <tt>adjacent_vertices</tt>.
|
||||
The type for the iterators returned by <tt>adjacent_vertices</tt>.
|
||||
(Required by <a href="AdjacencyGraph.html">AdjacencyGraph</a>.)
|
||||
|
||||
<hr>
|
||||
@@ -252,7 +252,7 @@ graph_traits<subgraph>::edge_parallel_category
|
||||
parallel edges (edges with the same source and target), which
|
||||
depends on the underlying <tt>Graph</tt> class. The two tags are
|
||||
<tt>allow_parallel_edge_tag</tt> and
|
||||
<tt>disallow_parallel_edge_tag</tt>.
|
||||
<tt>disallow_parallel_edge_tag</tt>.
|
||||
(Required by <a href="Graph.html">Graph</a>.)
|
||||
|
||||
<hr>
|
||||
@@ -388,7 +388,7 @@ subgraph& parent()
|
||||
<pre>
|
||||
std::pair<children_iterator, children_iterator> children() const
|
||||
</pre>
|
||||
Return an iterator pair for accessing the children subgraphs.
|
||||
Return an iterator pair for accessing the children subgraphs.
|
||||
|
||||
|
||||
<!----------------------------->
|
||||
@@ -441,7 +441,7 @@ out_edges(vertex_descriptor u_local, const subgraph& g)
|
||||
Returns an iterator range providing access to the out-edges of
|
||||
vertex <i>u</i> in subgraph <i>g</i>. If the graph is undirected, this
|
||||
iterator range provides access to all edge incident on
|
||||
vertex <i>u</i>.
|
||||
vertex <i>u</i>.
|
||||
(Required by <a href="IncidenceGraph.html">IncidenceGraph</a>.)
|
||||
|
||||
<hr>
|
||||
@@ -451,7 +451,7 @@ in_edges(vertex_descriptor v_local, const subgraph& g)
|
||||
</pre>
|
||||
Returns an iterator range providing access to the in-edges of
|
||||
vertex
|
||||
<i>v</i> in subgraph <i>g</i>.
|
||||
<i>v</i> in subgraph <i>g</i>.
|
||||
(Required by <a href="BidirectionalGraph.html">BidirectionalGraph</a>.)
|
||||
|
||||
<hr>
|
||||
@@ -482,7 +482,7 @@ out_degree(vertex_descriptor u_local, const subgraph& g)
|
||||
<pre>
|
||||
degree_size_type in_degree(vertex_descriptor u_local, const subgraph& g)
|
||||
</pre>
|
||||
Returns the number of edges entering vertex <i>u</i> in subgraph <i>g</i>.
|
||||
Returns the number of edges entering vertex <i>u</i> in subgraph <i>g</i>.
|
||||
(Required by <a href="BidirectionalGraph.html">BidirectionalGraph</a>.)
|
||||
|
||||
<hr>
|
||||
@@ -543,7 +543,7 @@ void remove_edge(vertex_descriptor u_local, vertex_descriptor v_local,
|
||||
subgraph& g)
|
||||
</pre>
|
||||
Removes the edge <i>(u,v)</i> from the subgraph and from all of the
|
||||
ancestors of <tt>g</tt> in the subgraph tree.
|
||||
ancestors of <tt>g</tt> in the subgraph tree.
|
||||
(Required by <a href="EdgeMutableGraph.html">EdgeMutableGraph</a>.)
|
||||
|
||||
<hr>
|
||||
@@ -551,7 +551,7 @@ void remove_edge(vertex_descriptor u_local, vertex_descriptor v_local,
|
||||
void remove_edge(edge_descriptor e_local, subgraph& g)
|
||||
</pre>
|
||||
Removes the edge <tt>e</tt> from the subgraph and from all of the
|
||||
ancestors of <tt>g</tt> in the subgraph tree.
|
||||
ancestors of <tt>g</tt> in the subgraph tree.
|
||||
(Required by <a href="EdgeMutableGraph.html">EdgeMutableGraph</a>.)
|
||||
|
||||
<hr>
|
||||
@@ -591,7 +591,7 @@ get(PropertyTag, const subgraph& g)
|
||||
descriptor for one subgraph will change the property for the
|
||||
global vertex descriptor, and therefore for all other subgraphs.
|
||||
However, the key type for a subgraph's property map is a subgraph-local
|
||||
vertex or edge descriptor.
|
||||
vertex or edge descriptor.
|
||||
(Required by <a href="PropertyGraph.html">PropertyGraph</a>.)
|
||||
|
||||
<hr>
|
||||
@@ -605,7 +605,7 @@ get(PropertyTag, const subgraph& g, Key k_local)
|
||||
This returns the property value for the key <tt>k_local</tt>, which
|
||||
is either a local vertex or local edge descriptor. See the above
|
||||
<tt>get</tt> function
|
||||
for more information about the propert maps.
|
||||
for more information about the propert maps.
|
||||
(Required by <a href="PropertyGraph.html">PropertyGraph</a>.)
|
||||
|
||||
<hr>
|
||||
@@ -656,11 +656,11 @@ properties into a <tt>property</tt> that contains an appropriate index. For
|
||||
example:
|
||||
<pre>
|
||||
struct my_vertex { ... };
|
||||
typedef property<vertex_index_t, std::size_t, vertex_prop> vertex_prop;
|
||||
typedef property<vertex_index_t, std::size_t, my_vertex> vertex_prop;
|
||||
|
||||
struct my_edge { ... };
|
||||
typedef property<edge_index_t, std::size_t, vertex_prop> edge_prop;
|
||||
typedef property<edge_index_t, std::size_t, my_edge> edge_prop;
|
||||
|
||||
typedef adjacency_list<vecS, listS, undirectedS, vertex_prop, edge_prop> Graph;
|
||||
typdef subgraph<Graph> Subgraph;
|
||||
typedef subgraph<Graph> Subgraph;
|
||||
</pre>
|
||||
|
||||
@@ -214,7 +214,7 @@ IN: <tt>vertex_index_map(VertexIndexMap i_map)</tt>
|
||||
<b>Default:</b> <tt>get(vertex_index, g)</tt>
|
||||
Note: if you use this default, make sure your graph has
|
||||
an internal <tt>vertex_index</tt> property. For example,
|
||||
<tt>adjacenty_list</tt> with <tt>VertexList=listS</tt> does
|
||||
<tt>adjacency_list</tt> with <tt>VertexList=listS</tt> does
|
||||
not have an internal <tt>vertex_index</tt> property.
|
||||
</blockquote>
|
||||
|
||||
|
||||
@@ -101,7 +101,7 @@ IN: <tt>vertex_index_map(VertexIndexMap i_map)</tt>
|
||||
<b>Default:</b> <tt>get(vertex_index, g)</tt>
|
||||
Note: if you use this default, make sure your graph has
|
||||
an internal <tt>vertex_index</tt> property. For example,
|
||||
<tt>adjacenty_list</tt> with <tt>VertexList=listS</tt> does
|
||||
<tt>adjacency_list</tt> with <tt>VertexList=listS</tt> does
|
||||
not have an internal <tt>vertex_index</tt> property.
|
||||
<br>
|
||||
|
||||
|
||||
@@ -97,7 +97,7 @@ IN: <tt>vertex_index_map(VertexIndexMap& index_map)</tt>
|
||||
<b>Default:</b> <tt>get(vertex_index, g)</tt>
|
||||
Note: if you use this default, make sure your graph has
|
||||
an internal <tt>vertex_index</tt> property. For example,
|
||||
<tt>adjacenty_list</tt> with <tt>VertexList=listS</tt> does
|
||||
<tt>adjacency_list</tt> with <tt>VertexList=listS</tt> does
|
||||
not have an internal <tt>vertex_index</tt> property.
|
||||
<br>
|
||||
|
||||
|
||||
@@ -91,7 +91,7 @@ integers from 0 to <tt>num_vertices(G)</tt>.<br>
|
||||
<b>Default:</b> <tt>get(vertex_index, G)</tt>
|
||||
Note: if you use this default, make sure your graph has
|
||||
an internal <tt>vertex_index</tt> property. For example,
|
||||
<tt>adjacenty_list</tt> with <tt>VertexList=listS</tt> does
|
||||
<tt>adjacency_list</tt> with <tt>VertexList=listS</tt> does
|
||||
not have an internal <tt>vertex_index</tt> property.
|
||||
</blockquote>
|
||||
|
||||
|
||||
@@ -253,7 +253,7 @@ IN: <tt>vertex_index_map(VertexIndexMap i_map)</tt>
|
||||
<b>Default:</b> <tt>get(vertex_index, g)</tt>
|
||||
Note: if you use this default, make sure your graph has
|
||||
an internal <tt>vertex_index</tt> property. For example,
|
||||
<tt>adjacenty_list</tt> with <tt>VertexList=listS</tt> does
|
||||
<tt>adjacency_list</tt> with <tt>VertexList=listS</tt> does
|
||||
not have an internal <tt>vertex_index</tt> property.
|
||||
<br>
|
||||
|
||||
|
||||
@@ -33,7 +33,7 @@ or form.</p>
|
||||
<li><a href="http://www.bioconductor.org/repository/devel/vignette/RBGL.pdf">
|
||||
BGL interface for language R.</a></li>
|
||||
<li><a href="http://www.cuj.com/documents/s=8470/cuj0307tan/">CUJ Article about Electronic Design Automation</a></li>
|
||||
<li><a href="http://rubyforge.org/projects/rgl/">A BGL-inspired Ruby Graph Library</a></li>
|
||||
<li><a href="http://www.rubydoc.info/github/monora/rgl">A BGL-inspired Ruby Graph Library</a></li>
|
||||
<li><a href="http://www.codeproject.com/cs/miscctrl/quickgraph.asp">A BGL-inspired C# Graph Library</a></li>
|
||||
<li><a href="http://map1.squeakfoundation.org/sm/package/5729d80a-822b-4bc2-9420-ef7ecaea8553">A BGL-inspired Squeak (Smalltalk) Graph Library</a></li>
|
||||
<li><a href="http://www.datasim.nl/education/coursedetails.asp?coursecategory=CPP&coursecode=ADCPP">BGL course at DataSim</a></li>
|
||||
|
||||
@@ -70,7 +70,7 @@ write_graphviz_dp(std::ostream& out, const Graph& g,
|
||||
|
||||
<p>
|
||||
This is to write a BGL graph object into an output stream in graphviz dot format
|
||||
so that users can make use of <a href="http://www.research.att.com/sw/tools/graphviz/">AT&T graphviz</a>
|
||||
so that users can make use of <a href="http://www.graphviz.org/">graphviz</a>
|
||||
to draw a picture with nice layout.
|
||||
<p>
|
||||
The first version with two parameters will write the graph into a
|
||||
|
||||
@@ -4,54 +4,215 @@
|
||||
# file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
|
||||
|
||||
|
||||
# exe labeled_graph : labeled_graph.cpp ;
|
||||
# exe quick_tour_new : quick_tour_new.cpp ;
|
||||
exe degree_centrality : degree_centrality.cpp ;
|
||||
exe influence_prestige : influence_prestige.cpp ;
|
||||
exe closeness_centrality : closeness_centrality.cpp ;
|
||||
exe scaled_closeness_centrality : scaled_closeness_centrality.cpp ;
|
||||
exe mean_geodesic : mean_geodesic.cpp ;
|
||||
exe inclusive_mean_geodesic : inclusive_mean_geodesic.cpp ;
|
||||
exe eccentricity : eccentricity.cpp ;
|
||||
exe clustering_coefficient : clustering_coefficient.cpp ;
|
||||
exe tiernan_print_cycles : tiernan_print_cycles.cpp ;
|
||||
exe tiernan_girth_circumference : tiernan_girth_circumference.cpp ;
|
||||
exe bron_kerbosch_print_cliques : bron_kerbosch_print_cliques.cpp ;
|
||||
exe bron_kerbosch_clique_number : bron_kerbosch_clique_number.cpp ;
|
||||
exe mcgregor_subgraphs_example : mcgregor_subgraphs_example.cpp ;
|
||||
exe grid_graph_example : grid_graph_example.cpp ;
|
||||
exe grid_graph_properties : grid_graph_properties.cpp ;
|
||||
exe bipartite_example : bipartite_example.cpp ;
|
||||
exe fr_layout : fr_layout.cpp ;
|
||||
exe canonical_ordering : canonical_ordering.cpp ;
|
||||
exe components_on_edgelist : components_on_edgelist.cpp ;
|
||||
exe boykov_kolmogorov-eg : boykov_kolmogorov-eg.cpp ;
|
||||
exe ospf-example : ospf-example.cpp ../build//boost_graph ;
|
||||
# exe cc-internet : cc-internet.cpp ../build//boost_graph ;
|
||||
exe implicit_graph : implicit_graph.cpp ;
|
||||
exe astar_maze : astar_maze.cpp ;
|
||||
exe accum-compile-times : accum-compile-times.cpp ;
|
||||
exe actor_clustering : actor_clustering.cpp ;
|
||||
exe adjacency_list : adjacency_list.cpp ;
|
||||
exe adjacency_list_io : adjacency_list_io.cpp ;
|
||||
exe adjacency_matrix : adjacency_matrix.cpp ;
|
||||
exe adj_list_ra_edgelist : adj_list_ra_edgelist.cpp ;
|
||||
exe astar-cities : astar-cities.cpp ;
|
||||
exe stoer_wagner : stoer_wagner.cpp ;
|
||||
exe bfs-example : bfs-example.cpp ;
|
||||
exe astar_maze : astar_maze.cpp ;
|
||||
exe bellman-example : bellman-example.cpp ;
|
||||
exe bellman-ford-internet : bellman-ford-internet.cpp ;
|
||||
exe bfs : bfs.cpp ;
|
||||
exe bfs-example2 : bfs-example2.cpp ;
|
||||
exe bfs-example : bfs-example.cpp ;
|
||||
exe bfs-name-printer : bfs-name-printer.cpp ;
|
||||
exe bfs_neighbor : bfs_neighbor.cpp ;
|
||||
exe bipartite_example : bipartite_example.cpp ;
|
||||
exe biconnected_components : biconnected_components.cpp ;
|
||||
exe boost_web_graph : boost_web_graph.cpp ;
|
||||
exe boykov_kolmogorov-eg : boykov_kolmogorov-eg.cpp ;
|
||||
exe bron_kerbosch_clique_number : bron_kerbosch_clique_number.cpp ;
|
||||
exe bron_kerbosch_print_cliques : bron_kerbosch_print_cliques.cpp ;
|
||||
#exe bucket_sorter : bucket_sorter.cpp ;
|
||||
exe canonical_ordering : canonical_ordering.cpp ;
|
||||
# exe cc-internet : cc-internet.cpp ../build//boost_graph ;
|
||||
exe city_visitor : city_visitor.cpp ;
|
||||
exe closeness_centrality : closeness_centrality.cpp ;
|
||||
exe clustering_coefficient : clustering_coefficient.cpp ;
|
||||
exe components_on_edgelist : components_on_edgelist.cpp ;
|
||||
|
||||
# TODO: Duplicate?
|
||||
exe connected_components : connected_components.cpp ;
|
||||
exe connected-components : connected-components.cpp ;
|
||||
|
||||
exe container_gen : container_gen.cpp ;
|
||||
exe copy-example : copy-example.cpp ;
|
||||
# exe csr-example : csr-example.cpp ;
|
||||
exe cuthill_mckee_ordering : cuthill_mckee_ordering.cpp ;
|
||||
exe cycle_canceling_example : cycle_canceling_example.cpp ;
|
||||
exe cycle-file-dep2 : cycle-file-dep2.cpp ;
|
||||
exe cycle-file-dep : cycle-file-dep.cpp ;
|
||||
exe cycle_ratio_example : cycle_ratio_example.cpp ;
|
||||
exe dag_shortest_paths : dag_shortest_paths.cpp ;
|
||||
exe dave : dave.cpp ;
|
||||
exe default-constructor2 : default-constructor2.cpp ;
|
||||
exe default-constructor : default-constructor.cpp ;
|
||||
exe degree_centrality : degree_centrality.cpp ;
|
||||
exe dfs : dfs.cpp ;
|
||||
exe dfs-example : dfs-example.cpp ;
|
||||
|
||||
# TODO: Duplicate?
|
||||
exe dfs_parenthesis : dfs_parenthesis.cpp ;
|
||||
# exe dfs-parenthesis : dfs-parenthesis.cpp ;
|
||||
|
||||
exe dijkstra-example : dijkstra-example.cpp ;
|
||||
exe dijkstra-example-listS : dijkstra-example-listS.cpp ;
|
||||
exe dijkstra-no-color-map-example : dijkstra-no-color-map-example.cpp ;
|
||||
exe adjacency_list_io : adjacency_list_io.cpp ;
|
||||
exe undirected_adjacency_list : undirected_adjacency_list.cpp ;
|
||||
exe directed_graph : directed_graph.cpp ;
|
||||
exe undirected_graph : undirected_graph.cpp ;
|
||||
exe two_graphs_common_spanning_trees : two_graphs_common_spanning_trees.cpp ;
|
||||
exe strong_components : strong_components.cpp ../build//boost_graph ;
|
||||
exe eccentricity : eccentricity.cpp ;
|
||||
exe edge_basics : edge_basics.cpp ;
|
||||
exe edge_coloring : edge_coloring.cpp ;
|
||||
|
||||
# TODO: Duplicate?
|
||||
exe edge_connectivity : edge_connectivity.cpp ;
|
||||
# exe edge-connectivity : edge-connectivity.cpp ;
|
||||
|
||||
exe edge-function : edge-function.cpp ;
|
||||
|
||||
# TODO: Duplicate?
|
||||
exe edge_iterator_constructor : edge_iterator_constructor.cpp ;
|
||||
exe edge-iter-constructor : edge-iter-constructor.cpp ;
|
||||
|
||||
exe edge_property : edge_property.cpp ;
|
||||
exe edmonds-karp-eg : edmonds-karp-eg.cpp ;
|
||||
exe exterior_properties : exterior_properties.cpp ;
|
||||
exe exterior_property_map : exterior_property_map.cpp ;
|
||||
exe family-tree-eg : family-tree-eg.cpp ;
|
||||
exe fibonacci_heap : fibonacci_heap.cpp ;
|
||||
exe file_dependencies : file_dependencies.cpp ;
|
||||
exe filtered-copy-example : filtered-copy-example.cpp ;
|
||||
exe filtered_graph : filtered_graph.cpp ;
|
||||
exe filtered_graph_edge_range : filtered_graph_edge_range.cpp ;
|
||||
exe filtered_vec_as_graph : filtered_vec_as_graph.cpp ;
|
||||
exe fr_layout : fr_layout.cpp ;
|
||||
exe gerdemann : gerdemann.cpp ;
|
||||
|
||||
# This needs SGB headers, via BGL's stanford_graph.h:
|
||||
# exe girth : girth.cpp ;
|
||||
|
||||
exe graph-assoc-types : graph-assoc-types.cpp ;
|
||||
|
||||
#TODO:
|
||||
#exe graph_as_tree : graph_as_tree.cpp ;
|
||||
|
||||
exe graph : graph.cpp ;
|
||||
exe graph_property : graph_property.cpp ;
|
||||
exe graph-property-iter-eg : graph-property-iter-eg.cpp ;
|
||||
exe graph-thingie : graph-thingie.cpp /boost/graph//boost_graph ;
|
||||
exe graphviz : graphviz.cpp /boost/graph//boost_graph ;
|
||||
exe grid_graph_example : grid_graph_example.cpp ;
|
||||
exe grid_graph_properties : grid_graph_properties.cpp ;
|
||||
exe hawick_circuits : hawick_circuits.cpp ;
|
||||
exe implicit_graph : implicit_graph.cpp ;
|
||||
exe inclusive_mean_geodesic : inclusive_mean_geodesic.cpp ;
|
||||
exe incremental_components : incremental_components.cpp ;
|
||||
exe incremental-components-eg : incremental-components-eg.cpp ;
|
||||
exe in_edges : in_edges.cpp ;
|
||||
exe influence_prestige : influence_prestige.cpp ;
|
||||
exe interior_pmap_bundled : interior_pmap_bundled.cpp ;
|
||||
exe interior_property_map : interior_property_map.cpp ;
|
||||
exe isomorphism : isomorphism.cpp ;
|
||||
exe iteration_macros : iteration_macros.cpp ;
|
||||
exe iterator-property-map-eg : iterator-property-map-eg.cpp ;
|
||||
exe johnson-eg : johnson-eg.cpp ;
|
||||
exe kevin-bacon2 : kevin-bacon2.cpp /boost//serialization ;
|
||||
exe kevin-bacon : kevin-bacon.cpp ;
|
||||
exe king_ordering : king_ordering.cpp ;
|
||||
exe knights-tour : knights-tour.cpp ;
|
||||
exe kruskal-example : kruskal-example.cpp ;
|
||||
# exe kruskal-telephone : kruskal-telephone.cpp ;
|
||||
exe kuratowski_subgraph : kuratowski_subgraph.cpp ;
|
||||
# exe labeled_graph : last-mod-time.cpp ;
|
||||
exe last-mod-time : last-mod-time.cpp ;
|
||||
|
||||
# These need LEDA:
|
||||
# exe leda-concept-check : leda-concept-check.cpp ;
|
||||
# exe leda-graph-eg : leda-graph-eg.cpp ;
|
||||
|
||||
# exe loops_dfs : loops_dfs.cpp ;
|
||||
exe make_biconnected_planar : make_biconnected_planar.cpp ;
|
||||
exe make_maximal_planar : make_maximal_planar.cpp ;
|
||||
exe matching_example : matching_example.cpp ;
|
||||
exe max_flow : max_flow.cpp ;
|
||||
exe mcgregor_subgraphs_example : mcgregor_subgraphs_example.cpp ;
|
||||
exe mean_geodesic : mean_geodesic.cpp ;
|
||||
|
||||
# This needs SGB headers, via BGL's stanford_graph.h:
|
||||
# exe miles_span : miles_span.cpp ;
|
||||
|
||||
exe minimum_degree_ordering : minimum_degree_ordering.cpp iohb.c ;
|
||||
|
||||
# This has an error pragma explaining that it is incorrect.
|
||||
# exe min_max_paths : min_max_paths.cpp ;
|
||||
|
||||
exe modify_graph : modify_graph.cpp ;
|
||||
exe neighbor_bfs : neighbor_bfs.cpp ;
|
||||
exe ordered_out_edges : ordered_out_edges.cpp ;
|
||||
exe ospf-example : ospf-example.cpp ../build//boost_graph ;
|
||||
exe parallel-compile-time : parallel-compile-time.cpp ;
|
||||
exe planar_face_traversal : planar_face_traversal.cpp ;
|
||||
exe prim-example : prim-example.cpp ;
|
||||
# exe prim-telephone : prim-telephone.cpp ;
|
||||
exe print-adjacent-vertices : print-adjacent-vertices.cpp ;
|
||||
exe print-edges : print-edges.cpp ;
|
||||
exe print-in-edges : print-in-edges.cpp ;
|
||||
exe print-out-edges : print-out-edges.cpp ;
|
||||
exe property_iterator : property_iterator.cpp ;
|
||||
exe property-map-traits-eg : property-map-traits-eg.cpp ;
|
||||
exe push-relabel-eg : push-relabel-eg.cpp ;
|
||||
exe put-get-helper-eg : put-get-helper-eg.cpp ;
|
||||
exe quick_tour : quick_tour.cpp ;
|
||||
exe r_c_shortest_paths_example : r_c_shortest_paths_example.cpp ;
|
||||
exe read_graphviz : read_graphviz.cpp ../build//boost_graph ;
|
||||
exe read_write_dimacs-eg : read_write_dimacs-eg.cpp ;
|
||||
# exe reachable-loop-head : reachable-loop-head.cpp ;
|
||||
# exe reachable-loop-tail : reachable-loop-tail.cpp ;
|
||||
exe remove_edge_if_bidir : remove_edge_if_bidir.cpp ;
|
||||
exe remove_edge_if_dir : remove_edge_if_dir.cpp ;
|
||||
exe remove_edge_if_undir : remove_edge_if_undir.cpp ;
|
||||
exe reverse-graph-eg : reverse-graph-eg.cpp ;
|
||||
|
||||
# This needs SGB headers, via BGL's stanford_graph.h:
|
||||
# exe roget_components : roget_components.cpp ;
|
||||
|
||||
# exe quick_tour_new : quick_tour_new.cpp ;
|
||||
exe scaled_closeness_centrality : scaled_closeness_centrality.cpp ;
|
||||
# exe scc : scc.cpp ;
|
||||
exe simple_planarity_test : simple_planarity_test.cpp ;
|
||||
exe sloan_ordering : sloan_ordering.cpp ;
|
||||
exe stoer_wagner : stoer_wagner.cpp ;
|
||||
exe strong-components : strong-components.cpp ;
|
||||
exe subgraph : subgraph.cpp ;
|
||||
exe strong_components : strong_components.cpp ../build//boost_graph ;
|
||||
exe subgraph_properties : subgraph_properties.cpp ;
|
||||
exe subgraph : subgraph.cpp ;
|
||||
exe successive_shortest_path_nonnegative_weights_example : successive_shortest_path_nonnegative_weights_example.cpp ;
|
||||
exe tiernan_girth_circumference : tiernan_girth_circumference.cpp ;
|
||||
exe tiernan_print_cycles : tiernan_print_cycles.cpp ;
|
||||
exe topo-sort1 : topo-sort1.cpp ;
|
||||
exe topo-sort2 : topo-sort2.cpp ;
|
||||
exe topo_sort : topo_sort.cpp ;
|
||||
exe topo-sort-file-dep2 : topo-sort-file-dep2.cpp ;
|
||||
exe topo-sort-file-dep : topo-sort-file-dep.cpp ;
|
||||
|
||||
# This needs LEDA:
|
||||
# exe topo-sort-with-leda : topo-sort-with-leda.cpp ;
|
||||
|
||||
# This needs SGB headers, via BGL's stanford_graph.h:
|
||||
# exe topo-sort-with-sgb : topo-sort-with-sgb.cpp ;
|
||||
|
||||
exe transitive_closure : transitive_closure.cpp ;
|
||||
exe transpose-example : transpose-example.cpp ;
|
||||
exe two_graphs_common_spanning_trees : two_graphs_common_spanning_trees.cpp ;
|
||||
exe undirected_adjacency_list : undirected_adjacency_list.cpp ;
|
||||
exe undirected_dfs : undirected_dfs.cpp ;
|
||||
exe undirected_graph : undirected_graph.cpp ;
|
||||
exe vector-as-graph : vector-as-graph.cpp ;
|
||||
exe vertex_basics : vertex_basics.cpp ;
|
||||
exe vertex-name-property : vertex-name-property.cpp ;
|
||||
exe vf2_sub_graph_iso_example : vf2_sub_graph_iso_example.cpp ;
|
||||
exe vf2_sub_graph_iso_multi_example : vf2_sub_graph_iso_multi_example.cpp ;
|
||||
exe sloan_ordering : sloan_ordering.cpp ;
|
||||
exe hawick_circuits : hawick_circuits.cpp ;
|
||||
exe edge_coloring : edge_coloring.cpp ;
|
||||
exe successive_shortest_path_nonnegative_weights_example : successive_shortest_path_nonnegative_weights_example.cpp ;
|
||||
exe cycle_canceling_example : cycle_canceling_example.cpp ;
|
||||
exe visitor : visitor.cpp ;
|
||||
exe write_graphviz : write_graphviz.cpp ;
|
||||
|
||||
|
||||
@@ -72,15 +72,9 @@ main()
|
||||
typedef property_map < file_dep_graph2, vertex_name_t >::type name_map_t;
|
||||
typedef property_map < file_dep_graph2, vertex_compile_cost_t >::type
|
||||
compile_cost_map_t;
|
||||
typedef property_map <file_dep_graph2, vertex_distance_t >::type
|
||||
distance_map_t;
|
||||
typedef property_map <file_dep_graph2, vertex_color_t >::type
|
||||
color_map_t;
|
||||
|
||||
name_map_t name_map = get(vertex_name, g);
|
||||
compile_cost_map_t compile_cost_map = get(vertex_compile_cost, g);
|
||||
distance_map_t distance_map = get(vertex_distance, g);
|
||||
color_map_t color_map = get(vertex_color, g);
|
||||
|
||||
std::ifstream name_in("makefile-target-names.dat");
|
||||
std::ifstream compile_cost_in("target-compile-costs.dat");
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
|
||||
#include <boost/config.hpp>
|
||||
#include <boost/graph/adjacency_list.hpp>
|
||||
#include <iostream>
|
||||
|
||||
int
|
||||
main()
|
||||
@@ -22,8 +23,12 @@ main()
|
||||
E edge_array[] = { E(0,1), E(0,2), E(0,1) };
|
||||
const std::size_t m = sizeof(edge_array) / sizeof(E);
|
||||
Graph g(edge_array, edge_array + m, n);
|
||||
for (std::size_t i = 0; i < m; ++i)
|
||||
std::cout << edges(g).first[i] << " ";
|
||||
|
||||
typename graph_traits<Graph>::edge_iterator edge_iterator;
|
||||
for (std::size_t i = 0; i < m; ++i) {
|
||||
const graph_traits<Graph>::edge_iterator e = edges(g).first + i;
|
||||
std::cout << *e << " ";
|
||||
}
|
||||
std::cout << std::endl;
|
||||
|
||||
return 0;
|
||||
|
||||
@@ -16,7 +16,6 @@ main()
|
||||
{
|
||||
using namespace boost;
|
||||
typedef adjacency_list < vecS, vecS, undirectedS > Graph;
|
||||
typedef graph_traits < Graph >::vertex_descriptor Vertex;
|
||||
|
||||
const int N = 6;
|
||||
Graph G(N);
|
||||
|
||||
@@ -15,7 +15,6 @@ int
|
||||
main()
|
||||
{
|
||||
using namespace boost;
|
||||
typedef int weight_t;
|
||||
typedef adjacency_list < vecS, vecS, directedS,
|
||||
property < vertex_name_t, char > > graph_t;
|
||||
|
||||
|
||||
@@ -38,7 +38,7 @@ int main()
|
||||
E(5, 2) };
|
||||
|
||||
typedef compressed_sparse_row_graph<directedS, WebPage> WebGraph;
|
||||
WebGraph g(&the_edges[0], &the_edges[0] + sizeof(the_edges)/sizeof(E), 6);
|
||||
WebGraph g(boost::edges_are_sorted, &the_edges[0], &the_edges[0] + sizeof(the_edges)/sizeof(E), 6);
|
||||
|
||||
// Set the URLs of each vertex
|
||||
int index = 0;
|
||||
|
||||
@@ -107,7 +107,6 @@ main(int , char* [])
|
||||
add_edge(4, 0, G);
|
||||
add_edge(4, 1, G);
|
||||
|
||||
typedef graph_traits<Graph>::vertex_descriptor Vertex;
|
||||
typedef graph_traits<Graph>::vertices_size_type size_type;
|
||||
|
||||
std::vector<size_type> d(num_vertices(G));
|
||||
|
||||
@@ -64,9 +64,6 @@ main(int, char*[])
|
||||
Graph G(edge_array, edge_array + sizeof(edge_array)/sizeof(E), 5);
|
||||
#endif
|
||||
|
||||
typedef boost::graph_traits<Graph>::vertex_descriptor Vertex;
|
||||
typedef boost::graph_traits<Graph>::vertices_size_type size_type;
|
||||
|
||||
std::cout << "DFS parenthesis:" << std::endl;
|
||||
depth_first_search(G, visitor(make_dfs_visitor(std::make_pair(open_paren(),
|
||||
close_paren()))));
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
// http://www.boost.org/LICENSE_1_0.txt)
|
||||
//=======================================================================
|
||||
|
||||
#include <iostream>
|
||||
#include <boost/config.hpp>
|
||||
#include <boost/graph/adjacency_list.hpp>
|
||||
#include <boost/graph/edge_coloring.hpp>
|
||||
@@ -56,7 +57,7 @@ int main(int, char *[])
|
||||
Graph G(10);
|
||||
|
||||
for (size_t i = 0; i < sizeof(edges)/sizeof(edges[0]); i++)
|
||||
add_edge(edges[i].first, edges[i].second, G).first;
|
||||
add_edge(edges[i].first, edges[i].second, G);
|
||||
|
||||
size_t colors = edge_coloring(G, get(edge_bundle, G));
|
||||
|
||||
|
||||
@@ -80,7 +80,7 @@ bool operator==(const edge_stream_iterator& x,
|
||||
const edge_stream_iterator& y)
|
||||
{
|
||||
return (x.m_stream == y.m_stream && x.m_end_marker == y.m_end_marker)
|
||||
|| x.m_end_marker == false && y.m_end_marker == false;
|
||||
|| (x.m_end_marker == false && y.m_end_marker == false);
|
||||
}
|
||||
bool operator!=(const edge_stream_iterator& x,
|
||||
const edge_stream_iterator& y)
|
||||
|
||||
@@ -141,8 +141,6 @@ int main(int , char* [])
|
||||
|
||||
add_edge(6, 8, Flow(10, Cap(8)), G);
|
||||
|
||||
typedef boost::graph_traits<Graph>::edge_descriptor Edge;
|
||||
|
||||
print_network(G);
|
||||
|
||||
property_map<Graph, edge_myflow_t>::type
|
||||
|
||||
@@ -29,7 +29,6 @@ int
|
||||
main()
|
||||
{
|
||||
using namespace boost;
|
||||
typedef int weight_t;
|
||||
typedef adjacency_list < vecS, vecS, bidirectionalS,
|
||||
property < vertex_name_t, char > > graph_t;
|
||||
|
||||
|
||||
@@ -28,7 +28,7 @@ template < typename Graph > void
|
||||
generic_bar(Graph & g)
|
||||
{
|
||||
// Declare some vertex and edge descriptor variables
|
||||
typename graph_traits < Graph >::vertex_descriptor u, v;
|
||||
typename graph_traits < Graph >::vertex_descriptor u = vertex(0,g), v = vertex(1,g);
|
||||
typename graph_traits < Graph >::edge_descriptor e1, e2;
|
||||
// Set u and e1 to valid descriptors...
|
||||
v = u; // Make v a handle to the same vertex as u.
|
||||
|
||||
@@ -89,6 +89,10 @@ const char* dot =
|
||||
istringstream gvgraph(dot);
|
||||
|
||||
bool status = read_graphviz(gvgraph,graph,dp,"node_id");
|
||||
if (!status) {
|
||||
cerr << "read_graphviz() failed." << endl;
|
||||
return -1;
|
||||
}
|
||||
|
||||
cout << "graph " << get("name",dp,&graph) <<
|
||||
" (" << get("identifier",dp,&graph) << ")\n\n";
|
||||
|
||||
@@ -46,7 +46,6 @@ std::size_t myrand(std::size_t N) {
|
||||
|
||||
template <class Graph>
|
||||
bool check_edge(Graph& g, std::size_t a, std::size_t b) {
|
||||
typedef typename Graph::vertex_descriptor Vertex;
|
||||
typename Graph::adjacency_iterator vi, viend, found;
|
||||
boost::tie(vi, viend) = adjacent_vertices(vertex(a,g), g);
|
||||
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
#include <boost/graph/graph_as_tree.hpp>
|
||||
#include <boost/graph/adjacency_list.hpp>
|
||||
#include <boost/cstdlib.hpp>
|
||||
#include <iostream>
|
||||
|
||||
class tree_printer {
|
||||
public:
|
||||
|
||||
@@ -381,7 +381,7 @@ edges_size_type num_edges(const ring_graph& g) {
|
||||
std::pair<edge_descriptor, bool>
|
||||
edge(vertex_descriptor u, vertex_descriptor v, const ring_graph& g) {
|
||||
if ((u == v + 1 || v == u + 1) &&
|
||||
u >= 0 && u < num_vertices(g) && v >= 0 && v < num_vertices(g))
|
||||
u > 0 && u < num_vertices(g) && v > 0 && v < num_vertices(g))
|
||||
return std::pair<edge_descriptor, bool>(edge_descriptor(u, v), true);
|
||||
else
|
||||
return std::pair<edge_descriptor, bool>(edge_descriptor(), false);
|
||||
|
||||
@@ -22,7 +22,7 @@ int main(int argc, char* argv[])
|
||||
{
|
||||
typedef adjacency_list <vecS, vecS, undirectedS> Graph;
|
||||
typedef graph_traits<Graph>::vertex_descriptor Vertex;
|
||||
typedef graph_traits<Graph>::edge_descriptor Edge;
|
||||
//typedef graph_traits<Graph>::edge_descriptor Edge;
|
||||
typedef graph_traits<Graph>::vertices_size_type VertexIndex;
|
||||
|
||||
// Create a graph
|
||||
|
||||
@@ -227,7 +227,7 @@ Fri Aug 15 16:29:47 EDT 1997
|
||||
|
||||
char* substr(const char* S, const int pos, const int len);
|
||||
void upcase(char* S);
|
||||
void IOHBTerminate(char* message);
|
||||
void IOHBTerminate(const char* message);
|
||||
|
||||
int readHB_info(const char* filename, int* M, int* N, int* nz, char** Type,
|
||||
int* Nrhs)
|
||||
@@ -1340,7 +1340,7 @@ int writeHB_mat_char(const char* filename, int M, int N,
|
||||
int Ptrperline, Ptrwidth, Indperline, Indwidth;
|
||||
int Rhsperline, Rhswidth, Rhsprec;
|
||||
int Rhsflag;
|
||||
int Valperline, Valwidth, Valprec;
|
||||
int Valperline = 1, Valwidth, Valprec;
|
||||
int Valflag; /* Indicates 'E','D', or 'F' float format */
|
||||
char pformat[16],iformat[16],vformat[19],rformat[19];
|
||||
|
||||
@@ -1602,9 +1602,9 @@ void upcase(char* S)
|
||||
S[i] = toupper(S[i]);
|
||||
}
|
||||
|
||||
void IOHBTerminate(char* message)
|
||||
void IOHBTerminate(const char* message)
|
||||
{
|
||||
fprintf(stderr,message);
|
||||
fprintf(stderr,"%s",message);
|
||||
exit(1);
|
||||
}
|
||||
|
||||
|
||||
@@ -62,7 +62,7 @@ int ParseIfmt(char* fmt, int* perline, int* width);
|
||||
|
||||
int ParseRfmt(char* fmt, int* perline, int* width, int* prec, int* flag);
|
||||
|
||||
void IOHBTerminate(char* message);
|
||||
void IOHBTerminate(const char* message);
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
|
||||
#include <boost/graph/adjacency_list.hpp>
|
||||
#include <boost/graph/iteration_macros.hpp>
|
||||
#include <iostream>
|
||||
|
||||
enum family { Jeanie, Debbie, Rick, John, Amanda, Margaret, Benjamin, N };
|
||||
|
||||
@@ -41,7 +42,7 @@ int main()
|
||||
else
|
||||
std::cout << " is the parent of ";
|
||||
|
||||
BGL_FORALL_ADJACENT(i, j, g, adjacency_list<>)
|
||||
BGL_FORALL_ADJ(i, j, g, adjacency_list<>)
|
||||
std::cout << name[get(index_map, j)] << ", ";
|
||||
std::cout << std::endl;
|
||||
}
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
#include <map>
|
||||
#include <boost/graph/adj_list_serialize.hpp>
|
||||
#include <boost/archive/text_iarchive.hpp>
|
||||
#include <boost/serialization/string.hpp>
|
||||
|
||||
struct vertex_properties {
|
||||
std::string name;
|
||||
|
||||
@@ -76,7 +76,7 @@ int main(int , char* [])
|
||||
Vertex s = vertex(6, G);
|
||||
//king_ordering
|
||||
king_ordering(G, s, inv_perm.rbegin(), get(vertex_color, G),
|
||||
get(vertex_degree, G));
|
||||
get(vertex_degree, G), get(vertex_index, G));
|
||||
cout << "King ordering starting at: " << s << endl;
|
||||
cout << " ";
|
||||
for (std::vector<Vertex>::const_iterator i = inv_perm.begin();
|
||||
@@ -94,7 +94,7 @@ int main(int , char* [])
|
||||
Vertex s = vertex(0, G);
|
||||
//king_ordering
|
||||
king_ordering(G, s, inv_perm.rbegin(), get(vertex_color, G),
|
||||
get(vertex_degree, G));
|
||||
get(vertex_degree, G), get(vertex_index, G));
|
||||
cout << "King ordering starting at: " << s << endl;
|
||||
cout << " ";
|
||||
for (std::vector<Vertex>::const_iterator i=inv_perm.begin();
|
||||
@@ -112,7 +112,7 @@ int main(int , char* [])
|
||||
{
|
||||
//king_ordering
|
||||
king_ordering(G, inv_perm.rbegin(), get(vertex_color, G),
|
||||
make_degree_map(G));
|
||||
make_degree_map(G), get(vertex_index, G));
|
||||
|
||||
cout << "King ordering:" << endl;
|
||||
cout << " ";
|
||||
|
||||
@@ -17,7 +17,6 @@ main()
|
||||
typedef adjacency_list < vecS, vecS, undirectedS,
|
||||
no_property, property < edge_weight_t, int > > Graph;
|
||||
typedef graph_traits < Graph >::edge_descriptor Edge;
|
||||
typedef graph_traits < Graph >::vertex_descriptor Vertex;
|
||||
typedef std::pair<int, int> E;
|
||||
|
||||
const int num_nodes = 5;
|
||||
|
||||
@@ -50,7 +50,6 @@ find_loops(typename graph_traits < Graph >::vertex_descriptor entry,
|
||||
{
|
||||
BOOST_CONCEPT_ASSERT(( BidirectionalGraphConcept<Graph> ));
|
||||
typedef typename graph_traits < Graph >::edge_descriptor Edge;
|
||||
typedef typename graph_traits < Graph >::vertex_descriptor Vertex;
|
||||
std::vector < Edge > back_edges;
|
||||
std::vector < default_color_type > color_map(num_vertices(g));
|
||||
depth_first_visit(g, entry,
|
||||
@@ -58,7 +57,7 @@ find_loops(typename graph_traits < Graph >::vertex_descriptor entry,
|
||||
make_iterator_property_map(color_map.begin(),
|
||||
get(vertex_index, g), color_map[0]));
|
||||
|
||||
for (std::vector < Edge >::size_type i = 0; i < back_edges.size(); ++i) {
|
||||
for (typename std::vector < Edge >::size_type i = 0; i < back_edges.size(); ++i) {
|
||||
typename Loops::value_type x;
|
||||
loops.push_back(x);
|
||||
compute_loop_extent(back_edges[i], g, loops.back());
|
||||
|
||||
@@ -99,13 +99,10 @@ int main(int argc, char* argv[])
|
||||
if ( argc >= 4 )
|
||||
delta = atoi(argv[3]);
|
||||
|
||||
typedef double Type;
|
||||
|
||||
harwell_boeing hbs(argv[1]);
|
||||
|
||||
//must be BGL directed graph now
|
||||
typedef adjacency_list<vecS, vecS, directedS> Graph;
|
||||
typedef graph_traits<Graph>::vertex_descriptor Vertex;
|
||||
|
||||
int n = hbs.nrows();
|
||||
|
||||
|
||||
@@ -32,7 +32,6 @@ main()
|
||||
}
|
||||
#else
|
||||
Graph g(edges, edges + sizeof(edges) / sizeof(E), weights, num_nodes);
|
||||
property_map<Graph, edge_weight_t>::type weightmap = get(edge_weight, g);
|
||||
#endif
|
||||
std::vector < graph_traits < Graph >::vertex_descriptor >
|
||||
p(num_vertices(g));
|
||||
|
||||
@@ -102,7 +102,6 @@ main()
|
||||
|
||||
graph_traits < graph_type >::vertex_iterator i, end;
|
||||
boost::tie(i, end) = vertices(g);
|
||||
typedef property_map < graph_type, vertex_name_t >::type name_map_t;
|
||||
i = std::find_if(i, end, name_equals("libzigzag.a", get(vertex_name, g)));
|
||||
output_in_edges(std::cout, g, *i, get(vertex_name, g));
|
||||
assert(num_vertices(g) == 15);
|
||||
|
||||
@@ -200,7 +200,6 @@ public:
|
||||
|
||||
// example graph structure and cost from
|
||||
// http://www.boost.org/libs/graph/example/dijkstra-example.cpp
|
||||
const int num_nodes = 5;
|
||||
enum nodes { A, B, C, D, E };
|
||||
char name[] = "ABCDE";
|
||||
|
||||
|
||||
@@ -57,5 +57,5 @@ int main() {
|
||||
|
||||
bool status = read_graphviz(gvgraph,graph,dp,"node_id");
|
||||
|
||||
return 0;
|
||||
return status ? EXIT_SUCCESS : EXIT_FAILURE;
|
||||
}
|
||||
|
||||
@@ -15,7 +15,6 @@ int
|
||||
main()
|
||||
{
|
||||
using namespace boost;
|
||||
typedef int weight_t;
|
||||
typedef adjacency_list < vecS, vecS, bidirectionalS,
|
||||
property < vertex_name_t, char > > graph_t;
|
||||
|
||||
|
||||
@@ -84,7 +84,6 @@ main(int, char*[])
|
||||
Graph G(edges, edges + sizeof(edges)/sizeof(E), 5);
|
||||
#endif
|
||||
|
||||
typedef boost::graph_traits<Graph>::vertex_descriptor Vertex;
|
||||
typedef boost::graph_traits<Graph>::vertices_size_type size_type;
|
||||
|
||||
std::vector<size_type> d(num_vertices(G));
|
||||
|
||||
@@ -10,6 +10,7 @@
|
||||
#ifndef BOOST_ADJACENCY_ITERATOR_HPP
|
||||
#define BOOST_ADJACENCY_ITERATOR_HPP
|
||||
|
||||
#include <boost/detail/iterator.hpp>
|
||||
#include <boost/iterator/iterator_adaptor.hpp>
|
||||
#include <boost/graph/graph_traits.hpp>
|
||||
|
||||
|
||||
@@ -20,14 +20,6 @@
|
||||
|
||||
#include <boost/unordered_set.hpp>
|
||||
|
||||
#if !defined BOOST_NO_SLIST
|
||||
# ifdef BOOST_SLIST_HEADER
|
||||
# include BOOST_SLIST_HEADER
|
||||
# else
|
||||
# include <slist>
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#include <boost/scoped_ptr.hpp>
|
||||
|
||||
#include <boost/graph/graph_traits.hpp>
|
||||
@@ -52,10 +44,6 @@ namespace boost {
|
||||
// to map the selectors to the container type used to implement the
|
||||
// graph.
|
||||
|
||||
#if !defined BOOST_NO_SLIST
|
||||
struct slistS {};
|
||||
#endif
|
||||
|
||||
struct vecS { };
|
||||
struct listS { };
|
||||
struct setS { };
|
||||
@@ -74,12 +62,7 @@ namespace boost {
|
||||
struct container_gen<listS, ValueType> {
|
||||
typedef std::list<ValueType> type;
|
||||
};
|
||||
#if !defined BOOST_NO_SLIST
|
||||
template <class ValueType>
|
||||
struct container_gen<slistS, ValueType> {
|
||||
typedef BOOST_STD_EXTENSION_NAMESPACE::slist<ValueType> type;
|
||||
};
|
||||
#endif
|
||||
|
||||
template <class ValueType>
|
||||
struct container_gen<vecS, ValueType> {
|
||||
typedef std::vector<ValueType> type;
|
||||
@@ -136,12 +119,6 @@ namespace boost {
|
||||
struct parallel_edge_traits<listS> {
|
||||
typedef allow_parallel_edge_tag type; };
|
||||
|
||||
#if !defined BOOST_NO_SLIST
|
||||
template <>
|
||||
struct parallel_edge_traits<slistS> {
|
||||
typedef allow_parallel_edge_tag type; };
|
||||
#endif
|
||||
|
||||
template <>
|
||||
struct parallel_edge_traits<setS> {
|
||||
typedef disallow_parallel_edge_tag type; };
|
||||
|
||||
@@ -443,7 +443,7 @@ namespace boost {
|
||||
// graph type. Instead, use directedS, which also provides the
|
||||
// functionality required for a Bidirectional Graph (in_edges,
|
||||
// in_degree, etc.).
|
||||
BOOST_STATIC_ASSERT(type_traits::ice_not<(is_same<Directed, bidirectionalS>::value)>::value);
|
||||
BOOST_STATIC_ASSERT(!(is_same<Directed, bidirectionalS>::value));
|
||||
|
||||
typedef typename mpl::if_<is_directed,
|
||||
bidirectional_tag, undirected_tag>::type
|
||||
|
||||
@@ -114,8 +114,6 @@ betweenness_centrality_clustering(MutableGraph& g, Done done,
|
||||
centrality_type;
|
||||
typedef typename graph_traits<MutableGraph>::edge_iterator edge_iterator;
|
||||
typedef typename graph_traits<MutableGraph>::edge_descriptor edge_descriptor;
|
||||
typedef typename graph_traits<MutableGraph>::vertices_size_type
|
||||
vertices_size_type;
|
||||
|
||||
if (has_no_edges(g)) return;
|
||||
|
||||
|
||||
@@ -6,13 +6,13 @@
|
||||
#ifndef BOOST_GRAPH_BUFFER_CONCEPTS_HPP
|
||||
#define BOOST_GRAPH_BUFFER_CONCEPTS_HPP 1
|
||||
#include <boost/concept_check.hpp>
|
||||
#include <boost/concept/detail/concept_def.hpp>
|
||||
#include <boost/property_map/property_map.hpp>
|
||||
#include <boost/typeof/typeof.hpp>
|
||||
#include <boost/type_traits/add_const.hpp>
|
||||
#include <boost/type_traits/add_reference.hpp>
|
||||
#include <boost/type_traits/remove_reference.hpp>
|
||||
|
||||
#include <boost/concept/detail/concept_def.hpp>
|
||||
namespace boost {
|
||||
|
||||
BOOST_concept(Buffer, (B))
|
||||
@@ -87,5 +87,6 @@ namespace boost {
|
||||
};
|
||||
|
||||
} // end `namespace boost`
|
||||
#include <boost/concept/detail/concept_undef.hpp>
|
||||
|
||||
#endif // !BOOST_GRAPH_BUFFER_CONCEPTS_HPP
|
||||
|
||||
@@ -248,8 +248,8 @@ namespace boost {
|
||||
|
||||
template <class Graph>
|
||||
struct choose_graph_copy {
|
||||
typedef typename Graph::traversal_category Trv;
|
||||
typedef typename Graph::directed_category Dr;
|
||||
typedef typename graph_traits<Graph>::traversal_category Trv;
|
||||
typedef typename graph_traits<Graph>::directed_category Dr;
|
||||
enum { algo =
|
||||
(is_convertible<Trv, vertex_list_graph_tag>::value
|
||||
&& is_convertible<Trv, edge_list_graph_tag>::value)
|
||||
|
||||
@@ -64,19 +64,27 @@ namespace boost {
|
||||
|
||||
template <bool IsCallable> struct do_call_finish_edge {
|
||||
template <typename E, typename G, typename Vis>
|
||||
static void call_finish_edge(Vis& vis, const E& e, const G& g) {
|
||||
static void call_finish_edge(Vis& vis, E e, const G& g) {
|
||||
vis.finish_edge(e, g);
|
||||
}
|
||||
};
|
||||
|
||||
template <> struct do_call_finish_edge<false> {
|
||||
template <typename E, typename G, typename Vis>
|
||||
static void call_finish_edge(Vis&, const E&, const G&) {}
|
||||
static void call_finish_edge(Vis&, E, const G&) {}
|
||||
};
|
||||
|
||||
template <typename E, typename G, typename Vis>
|
||||
void call_finish_edge(Vis& vis, const E& e, const G& g) { // Only call if method exists
|
||||
void call_finish_edge(Vis& vis, E e, const G& g) { // Only call if method exists
|
||||
#if ((defined(__GNUC__) && (__GNUC__ > 4) || ((__GNUC__ == 4) && (__GNUC_MINOR__ >= 9))) || \
|
||||
defined(__clang__) || \
|
||||
(defined(__INTEL_COMPILER) && (__INTEL_COMPILER >= 1200)))
|
||||
do_call_finish_edge<
|
||||
has_member_function_finish_edge<Vis, void,
|
||||
boost::mpl::vector<E, const G&> >::value>::call_finish_edge(vis, e, g);
|
||||
#else
|
||||
do_call_finish_edge<has_member_function_finish_edge<Vis, void>::value>::call_finish_edge(vis, e, g);
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
@@ -137,6 +145,11 @@ namespace boost {
|
||||
src_e = back.second.first;
|
||||
boost::tie(ei, ei_end) = back.second.second;
|
||||
stack.pop_back();
|
||||
// finish_edge has to be called here, not after the
|
||||
// loop. Think of the pop as the return from a recursive call.
|
||||
if (src_e) {
|
||||
call_finish_edge(vis, src_e.get(), g);
|
||||
}
|
||||
while (ei != ei_end) {
|
||||
Vertex v = target(*ei, g);
|
||||
vis.examine_edge(*ei, g);
|
||||
@@ -164,7 +177,6 @@ namespace boost {
|
||||
}
|
||||
put(color, u, Color::black());
|
||||
vis.finish_vertex(u, g);
|
||||
if (src_e) call_finish_edge(vis, src_e.get(), g);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -237,12 +237,6 @@ namespace boost {
|
||||
inline stored_edge() { }
|
||||
inline stored_edge(Vertex target, const no_property& = no_property())
|
||||
: m_target(target) { }
|
||||
// Need to write this explicitly so stored_edge_property can
|
||||
// invoke Base::operator= (at least, for SGI MIPSPro compiler)
|
||||
inline stored_edge& operator=(const stored_edge& x) {
|
||||
m_target = x.m_target;
|
||||
return *this;
|
||||
}
|
||||
inline Vertex& get_target() const { return m_target; }
|
||||
inline const no_property& get_property() const { return s_prop; }
|
||||
inline bool operator==(const stored_edge& x) const
|
||||
@@ -258,7 +252,7 @@ namespace boost {
|
||||
template <class Vertex>
|
||||
no_property stored_edge<Vertex>::s_prop;
|
||||
|
||||
#if defined(BOOST_NO_CXX11_RVALUE_REFERENCES) || defined(BOOST_NO_CXX11_DEFAULTED_FUNCTIONS)
|
||||
#if defined(BOOST_NO_CXX11_RVALUE_REFERENCES) || defined(BOOST_NO_CXX11_SMART_PTR)
|
||||
template <class Vertex, class Property>
|
||||
class stored_edge_property : public stored_edge<Vertex> {
|
||||
typedef stored_edge_property self;
|
||||
@@ -270,12 +264,24 @@ namespace boost {
|
||||
const Property& p = Property())
|
||||
: stored_edge<Vertex>(target), m_property(new Property(p)) { }
|
||||
stored_edge_property(const self& x)
|
||||
: Base(x), m_property(const_cast<self&>(x).m_property) { }
|
||||
: Base(static_cast< Base const& >(x)), m_property(const_cast<self&>(x).m_property) { }
|
||||
self& operator=(const self& x) {
|
||||
Base::operator=(x);
|
||||
// NOTE: avoid 'Base::operator=(x);' broken on SGI MIPSpro (bug 55771 of Mozilla).
|
||||
static_cast<Base&>(*this) = static_cast< Base const& >(x);
|
||||
m_property = const_cast<self&>(x).m_property;
|
||||
return *this;
|
||||
}
|
||||
#if !defined(BOOST_NO_CXX11_RVALUE_REFERENCES)
|
||||
// NOTE Don't rely on default operators, their behavior is broken on several compilers (GCC 4.6).
|
||||
stored_edge_property(self&& x)
|
||||
: Base(static_cast< Base&& >(x)), m_property(std::move(x.m_property)) { }
|
||||
self& operator=(self&& x) {
|
||||
// NOTE: avoid 'Base::operator=(x);' broken on SGI MIPSpro (bug 55771 of Mozilla).
|
||||
static_cast<Base&>(*this) = static_cast< Base&& >(x);
|
||||
m_property = std::move(x.m_property);
|
||||
return *this;
|
||||
}
|
||||
#endif
|
||||
inline Property& get_property() { return *m_property; }
|
||||
inline const Property& get_property() const { return *m_property; }
|
||||
protected:
|
||||
@@ -296,27 +302,22 @@ namespace boost {
|
||||
inline stored_edge_property(Vertex target,
|
||||
const Property& p = Property())
|
||||
: stored_edge<Vertex>(target), m_property(new Property(p)) { }
|
||||
#if defined(BOOST_MSVC) || (defined(BOOST_GCC) && (BOOST_GCC / 100) < 406)
|
||||
stored_edge_property(self&& x) : Base(static_cast< Base const& >(x)) {
|
||||
m_property.swap(x.m_property);
|
||||
}
|
||||
stored_edge_property(self const& x) : Base(static_cast< Base const& >(x)) {
|
||||
m_property.swap(const_cast<self&>(x).m_property);
|
||||
}
|
||||
stored_edge_property(self&& x) : Base(static_cast< Base&& >(x)),
|
||||
m_property(std::move(x.m_property)) { }
|
||||
stored_edge_property(self const& x) : Base(static_cast< Base const& >(x)),
|
||||
m_property(std::move(const_cast<self&>(x).m_property)) { }
|
||||
self& operator=(self&& x) {
|
||||
Base::operator=(static_cast< Base const& >(x));
|
||||
// NOTE: avoid 'Base::operator=(x);' broken on SGI MIPSpro (bug 55771 of Mozilla).
|
||||
static_cast<Base&>(*this) = static_cast< Base&& >(x);
|
||||
m_property = std::move(x.m_property);
|
||||
return *this;
|
||||
}
|
||||
self& operator=(self const& x) {
|
||||
Base::operator=(static_cast< Base const& >(x));
|
||||
// NOTE: avoid 'Base::operator=(x);' broken on SGI MIPSpro (bug 55771 of Mozilla).
|
||||
static_cast<Base&>(*this) = static_cast< Base const& >(x);
|
||||
m_property = std::move(const_cast<self&>(x).m_property);
|
||||
return *this;
|
||||
}
|
||||
#else
|
||||
stored_edge_property(self&& x) = default;
|
||||
self& operator=(self&& x) = default;
|
||||
#endif
|
||||
inline Property& get_property() { return *m_property; }
|
||||
inline const Property& get_property() const { return *m_property; }
|
||||
protected:
|
||||
|
||||
@@ -63,6 +63,9 @@ public:
|
||||
inline iterator& operator++() { ++i; return *this; }
|
||||
inline iterator operator++(int)
|
||||
{ iterator t = *this; ++(*this); return t; }
|
||||
inline iterator& operator--() { --i; return *this; }
|
||||
inline iterator operator--(int)
|
||||
{ iterator t = *this; --(*this); return t; }
|
||||
inline bool operator==(const iterator& x) const { return i == x.i; }
|
||||
inline bool operator!=(const iterator& x) const
|
||||
{ return !(*this == x); }
|
||||
|
||||
@@ -13,6 +13,8 @@
|
||||
|
||||
#include <iosfwd>
|
||||
|
||||
#include <boost/functional/hash.hpp>
|
||||
|
||||
namespace boost {
|
||||
|
||||
namespace detail {
|
||||
|
||||
@@ -58,10 +58,10 @@ namespace boost {
|
||||
|
||||
template <class Node, class Next>
|
||||
inline Node
|
||||
slist_previous(Node head, Node x, Node nil,
|
||||
slist_previous(Node head, Node x, Node empty,
|
||||
Next next)
|
||||
{
|
||||
while (head != nil && next(head) != x)
|
||||
while (head != empty && next(head) != x)
|
||||
head = next(head);
|
||||
return head;
|
||||
}
|
||||
@@ -82,12 +82,12 @@ namespace boost {
|
||||
|
||||
template <class Node, class Next>
|
||||
inline Node
|
||||
slist_reverse(Node node, Node nil,
|
||||
slist_reverse(Node node, Node empty,
|
||||
Next next)
|
||||
{
|
||||
Node result = node;
|
||||
node = next(node);
|
||||
next(result) = nil;
|
||||
next(result) = empty;
|
||||
while(node) {
|
||||
Node next = next(node);
|
||||
next(node) = result;
|
||||
@@ -99,11 +99,11 @@ namespace boost {
|
||||
|
||||
template <class Node, class Next>
|
||||
inline std::size_t
|
||||
slist_size(Node head, Node nil,
|
||||
slist_size(Node head, Node empty,
|
||||
Next next)
|
||||
{
|
||||
std::size_t s = 0;
|
||||
for ( ; head != nil; head = next(head))
|
||||
for ( ; head != empty; head = next(head))
|
||||
++s;
|
||||
return s;
|
||||
}
|
||||
|
||||
@@ -18,7 +18,7 @@
|
||||
// and page 34 or http://www.graphviz.org/pdf/dotguide.pdf
|
||||
//
|
||||
// See documentation for this code at:
|
||||
// http://www.boost.org/libs/graph/doc/read-graphviz.html
|
||||
// http://www.boost.org/libs/graph/doc/read_graphviz.html
|
||||
//
|
||||
|
||||
// Author: Jeremiah Willcock
|
||||
|
||||