Compare commits

...

554 Commits

Author SHA1 Message Date
nobody fe1a493211 This commit was manufactured by cvs2svn to create tag
'Version_1_34_0'.

[SVN r37679]
2007-05-12 21:59:40 +00:00
Dave Abrahams 3125c8577d Correct testing bugs:
either changing assert(...) or BOOST_ASSERT(...) to BOOST_TEST
    (in my code only)

    or adding "return boost::report_errors();" where it was clearly
    missing (and a pure bug, in anyone's code).

    or changing BOOST_TEST to BOOST_CHECK where the integer library
    was clearly using Boost.Test and not returning report_errors().


[SVN r37063]
2007-02-25 15:28:02 +00:00
Douglas Gregor 02cdd5c0f8 Fix adjacency list and property map serialization
[SVN r36895]
2007-02-05 22:16:58 +00:00
Daniel James 55d57690f1 Remove a tab.
[SVN r36645]
2007-01-07 22:21:57 +00:00
Aaron Windsor 0f49c8dcb2 merged bug fix
[SVN r36462]
2006-12-20 01:22:24 +00:00
Douglas Gregor 85dd95cf77 Remove none algorith, which is unused and conflicts with none.hpp
[SVN r36409]
2006-12-15 21:44:53 +00:00
Douglas Gregor 15d8e1dc21 Remove makefile gooP
[SVN r36408]
2006-12-15 21:19:02 +00:00
Douglas Gregor 99a56222da Fix file dependency example
[SVN r36407]
2006-12-15 21:07:14 +00:00
Douglas Gregor 3bec282dbd Finish renaming bgl-viz to boost_graph
[SVN r36404]
2006-12-15 13:35:08 +00:00
Douglas Gregor 3d5661096c Handle temporaries passed to filtered_graph
[SVN r36403]
2006-12-15 13:17:58 +00:00
Douglas Gregor dfb49e339d Fix criterion
[SVN r36400]
2006-12-15 12:58:54 +00:00
Douglas Gregor b493c0ea47 Remove Python gook, rename library to boost_graph
[SVN r36399]
2006-12-15 12:55:36 +00:00
Aaron Windsor 64b6038f92 renaming sorted_erdos_renyi_generator.html and lengauer_tarjan_dominator_tree.htm so inspection reports won't complain
[SVN r36374]
2006-12-14 02:20:34 +00:00
Aaron Windsor fbd5c5120f merged file name changes from HEAD to RC_1_34_0
[SVN r36373]
2006-12-14 02:12:42 +00:00
nobody 46ae2cb6c1 This commit was manufactured by cvs2svn to create branch 'RC_1_34_0'.
[SVN r36372]
2006-12-14 02:08:05 +00:00
Aaron Windsor d83d611b18 merging fix due to renaming maximum_cardinality_matching.hpp from HEAD to RC_1_34_0
[SVN r36370]
2006-12-14 01:06:01 +00:00
Aaron Windsor e53d23d7d7 merging fix due to renaming maximum_cardinality_matching.hpp from HEAD to RC_1_34_0
[SVN r36368]
2006-12-14 00:59:19 +00:00
Aaron Windsor 401165fe0c merging filename fix for maximum_cardinality_matching.hpp from HEAD to RC_1_34_0
[SVN r36367]
2006-12-14 00:51:26 +00:00
Aaron Windsor a728a94caa merged filename change for maximum_cardinality_matching from HEAD to RC_1_34_0
[SVN r36365]
2006-12-14 00:45:34 +00:00
nobody 833169b3a0 This commit was manufactured by cvs2svn to create branch 'RC_1_34_0'.
[SVN r36364]
2006-12-14 00:39:04 +00:00
Andreas Huber 79a1ef7d8f Merged L & C issue fixes from trunk to branch.
[SVN r36225]
2006-12-01 11:34:43 +00:00
Douglas Gregor 41051db37b Do not deduce Vertex in vertex function
[SVN r36202]
2006-11-29 20:30:27 +00:00
Vladimir Prus 99d4f31d38 Merge from HEAD.
Allow building of shared versions of some Boost.Test libraries.
Adjust tests to use always use static linking to Boost.Test, since
linking to the shared version requires test changes.

Patch from Juergen Hunold.


[SVN r35990]
2006-11-10 19:59:52 +00:00
Beman Dawes 2c884b70b7 Merged copyright and license addition
[SVN r35907]
2006-11-07 19:27:00 +00:00
Rene Rivera 0cb7bbf192 Remove obsolete Boost.Build v1 files.
[SVN r35880]
2006-11-06 17:10:46 +00:00
Douglas Gregor a306a8119f Cleanup lots of inspection failures
[SVN r35826]
2006-11-03 19:17:56 +00:00
Douglas Gregor 88edab5b45 Remove old Python cruft
[SVN r35825]
2006-11-03 19:10:49 +00:00
Douglas Gregor b0474f1dd9 Clear up copyright/license problems
[SVN r35824]
2006-11-03 18:55:11 +00:00
Douglas Gregor 344dd6b155 Fix handling of empty graphs
[SVN r35420]
2006-09-29 15:33:12 +00:00
Douglas Gregor bf2f7f86fa Fix parameter name
[SVN r35419]
2006-09-29 15:30:07 +00:00
Douglas Gregor 58e287d115 Do the DLL import/export dance for the GraphViz reader.
[SVN r35335]
2006-09-26 12:52:08 +00:00
Douglas Gregor d34d447b68 Test and fix serialization code
[SVN r35257]
2006-09-21 17:02:14 +00:00
Douglas Gregor a03ed0e26d Work around compiler optimizer bugs
[SVN r35225]
2006-09-20 13:55:16 +00:00
Douglas Gregor f4b0928c2d Work around Sun CC bug
[SVN r35100]
2006-09-13 20:49:10 +00:00
Douglas Gregor bc49236ccc Work around MSVC 6, 7 bug
[SVN r35099]
2006-09-13 20:41:28 +00:00
Daniel James 3a07fe7c22 Remove tabs.
[SVN r34994]
2006-08-29 20:55:58 +00:00
Douglas Gregor ac847ac715 Move initialize_vertex before setting properties
[SVN r34862]
2006-08-10 13:45:12 +00:00
Douglas Gregor ec2dcfddbb Move initialize_vertex after setting properties
[SVN r34861]
2006-08-10 13:41:30 +00:00
Douglas Gregor 9badc94845 Give bundle_property_map a default constructor
[SVN r34811]
2006-08-03 18:29:44 +00:00
Douglas Gregor 65f63fecc1 Documentation fixes, from David Baird
[SVN r34810]
2006-08-03 18:20:43 +00:00
Gennaro Prota 62cc164059 (merge from head)
fixed almost all issues reported by the inspect tool in boost/graph/


[SVN r34732]
2006-07-25 23:12:38 +00:00
Gennaro Prota 560f485326 (merge from head)
tab removal


[SVN r34730]
2006-07-25 14:27:40 +00:00
Gennaro Prota 5898cc5bae (merge from head)
removed unnamed namespace reported by inspect tool


[SVN r34716]
2006-07-24 21:58:09 +00:00
Douglas Gregor 1035ddac56 Work around MSVC 7.0 bug
[SVN r34656]
2006-07-21 20:25:50 +00:00
Douglas Gregor ce0f796b84 Work around VC7 bugs
[SVN r34456]
2006-07-03 18:03:34 +00:00
Rene Rivera 1b3a6936a2 Don't build old viz parser unless explicitly asked for. (merge from head)
[SVN r34442]
2006-07-02 16:43:58 +00:00
Douglas Gregor bf73135721 Fix parameter to add_vertices
[SVN r34413]
2006-06-27 13:46:36 +00:00
Caleb Epstein 1b468cb8aa boost/graph/{king_ordering,cuthill_mckee_ordering}.hpp: Fix for typedef conflict with DS macro on Solaris
[SVN r34355]
2006-06-19 14:49:21 +00:00
Douglas Gregor 05a7299c0e Be consistent about initialize_vertex calls
[SVN r34135]
2006-06-02 15:52:46 +00:00
Douglas Gregor fb06d7e38e directed_category need only be convertible to one of directed_tag or undirected_tag
[SVN r34133]
2006-06-02 14:27:15 +00:00
Douglas Gregor 0b1a337f52 Don't generate self edges when asked not to, from Johan Oudinet
[SVN r33644]
2006-04-10 20:09:33 +00:00
Douglas Gregor 891ec4e4e3 Move enum out of GraphParse::operator()
[SVN r33642]
2006-04-10 19:27:23 +00:00
Douglas Gregor 64428fc074 Move enum out of GraphParse::operator()
[SVN r33641]
2006-04-10 19:24:49 +00:00
Vladimir Prus 9a10195600 Merge from trunk
[SVN r33595]
2006-04-07 13:49:45 +00:00
nobody 0d52712c3d This commit was manufactured by cvs2svn to create branch 'RC_1_34_0'.
[SVN r33417]
2006-03-21 02:26:31 +00:00
Aaron Windsor 5597592ff5 Look at vertices with minimum degree 0 first instead of starting with those with minimum degree 1 (fix courtesy of Roman Dementiev)
[SVN r33414]
2006-03-21 00:26:19 +00:00
Aaron Windsor dea8296e5b Added link to maximum_cardinality_matching
[SVN r33400]
2006-03-20 00:10:43 +00:00
Aaron Windsor bcb16ef822 Bug fix from Roman Dementiev: when updating the degree of a vertex in the BucketSorter, that vertex could be moved to the wrong bucket.
[SVN r33374]
2006-03-18 17:28:50 +00:00
Aaron Windsor ce0ec9e236 Added bug fix for smallest_last_ordering.hpp from Roman Dementiev
[SVN r33373]
2006-03-18 17:26:22 +00:00
Douglas Gregor 9e359134a1 Moved to the Boost Software License
[SVN r33324]
2006-03-12 15:01:03 +00:00
Douglas Gregor be9ad03abe Update to Boost Software License
[SVN r33312]
2006-03-10 15:08:31 +00:00
Jeremy Siek dbe744f6e2 added superscript notation
[SVN r33296]
2006-03-09 22:15:41 +00:00
Jeremy Siek 9084e6ce9b added time complexity
[SVN r33294]
2006-03-09 22:13:42 +00:00
Douglas Gregor a4a5a1a42b Add dummy Directed parameter to the CSR graph
[SVN r33291]
2006-03-09 20:06:23 +00:00
Douglas Gregor f9da93dbe2 Add two_bit_color_map
[SVN r33290]
2006-03-09 19:55:13 +00:00
Douglas Gregor a0919bdff6 Fix CSR properties
[SVN r33289]
2006-03-09 19:52:39 +00:00
Douglas Gregor 573f424452 Update to Boost Software License
[SVN r33288]
2006-03-09 18:34:18 +00:00
Douglas Gregor 4a159ba118 Don't call boost::get qualified
[SVN r33286]
2006-03-09 16:23:36 +00:00
Ronald Garcia 0d6c5bb4e2 Removed unused function warning.
[SVN r33285]
2006-03-09 16:18:05 +00:00
Ronald Garcia 6616bdba33 adjusted namespace imports to be more localized.
[SVN r33284]
2006-03-09 16:16:09 +00:00
Ronald Garcia 7a6a6fcbb6 Remove unused variable warnings.
[SVN r33282]
2006-03-09 15:37:52 +00:00
Dave Abrahams 11f9e9b044 Stop using assert() in tests
[SVN r33181]
2006-02-28 22:56:33 +00:00
Douglas Gregor 399aa3b28a Give vector_as_graph a default vertex_index property
[SVN r33173]
2006-02-28 14:33:14 +00:00
Douglas Gregor a9e4925167 Tests for EdgeListS=setS
[SVN r33159]
2006-02-27 18:18:47 +00:00
Douglas Gregor 3eadd82c6b Fixes for EdgeListS=setS and static_asserts for broken functionality when EdgeListS=vecS
[SVN r33158]
2006-02-27 18:17:56 +00:00
Douglas Gregor 779274575b Properly support bundled properties for members stored in base classes of the bundle
[SVN r33156]
2006-02-27 16:35:26 +00:00
Douglas Gregor 5f28b0237a Add support for compare, combine, inf, and zero in johnson_all_pairs_shortest_paths
[SVN r33148]
2006-02-27 15:38:18 +00:00
Douglas Gregor 29a09c1fc0 Use compare and zero properly
[SVN r33146]
2006-02-27 15:15:13 +00:00
Douglas Gregor 7465bc2c20 Remove bidir_vec_remove_edge
[SVN r33145]
2006-02-27 14:33:49 +00:00
Vladimir Prus 36656fda3d Update Jamfile.v2
[SVN r33068]
2006-02-21 16:02:26 +00:00
Douglas Gregor 0245e863c8 Add some tests
[SVN r33040]
2006-02-20 21:26:46 +00:00
Alisdair Meredith af44a9cfa5 patch for infinite looping on Borland compilers
[SVN r33014]
2006-02-19 17:39:52 +00:00
Douglas Gregor 22ca266765 Improvements to biconnected components, from Janusz Piwowarski
[SVN r32902]
2006-02-13 18:42:30 +00:00
Jeremy Siek 12aa017c9f fixed url
[SVN r32830]
2006-02-11 16:07:16 +00:00
Jeremy Siek bb6401e096 tt
[SVN r32829]
2006-02-11 16:06:38 +00:00
Jeremy Siek 6cff97469a added note about serialization
[SVN r32828]
2006-02-11 16:05:22 +00:00
Jeremy Siek 75100306fe added name tag
[SVN r32827]
2006-02-11 15:48:57 +00:00
Jeremy Siek da3078ed52 added docs for serialization
[SVN r32826]
2006-02-11 15:44:14 +00:00
Douglas Gregor 70bbfe664b Some improvements from Jeremiah Willcock
[SVN r32743]
2006-02-08 16:15:16 +00:00
Douglas Gregor 3f81217fad Don't assume that null_vertex is the same type as vertices_size_type
[SVN r32740]
2006-02-08 15:37:02 +00:00
Douglas Gregor 3d7d3eb428 Work around x86 floating-point roundoff problems
[SVN r32737]
2006-02-08 14:47:35 +00:00
Douglas Gregor 7f05dc489b erdos_renyi_generator.hpp:
- Keep geometric_distribution happy by passing a non-zero probability

compressed_sparse_row_graph.hpp:
  - Weaken precondition for the Parallel BGL


[SVN r32712]
2006-02-07 17:11:29 +00:00
Douglas Gregor 70e0dd2d23 Add documentation, static_asserts for Bidirectional Graph support in adjacency_matrix
[SVN r32706]
2006-02-07 13:15:35 +00:00
Douglas Gregor 654e43a7ed Make adjacency_matrix model the BidirectionalGraph concept
[SVN r32688]
2006-02-07 04:02:22 +00:00
Douglas Gregor 4f36d52ec3 Update license
[SVN r32680]
2006-02-06 22:19:19 +00:00
Douglas Gregor 174d0d2dff Update copyrights
[SVN r32679]
2006-02-06 22:12:57 +00:00
Aaron Windsor f7db7b7771 Clean up
[SVN r32591]
2006-02-05 17:01:37 +00:00
Douglas Gregor d0176ea39d Fix call to dijkstra_shortest_paths_no_init
[SVN r32385]
2006-01-23 20:57:32 +00:00
Douglas Gregor 42b9c97d31 boost/config/stdlib/libstdcpp3.hpp:
- libstdc++ has hashed containers and slist; they're just in a different place

boost/graph/graph_utility.hpp, boost/pending/container_traits.hpp,
boost/graph/adjacency_list.hpp:
  - Deal with weird placement of slist and hash_set


[SVN r32384]
2006-01-23 20:50:27 +00:00
Douglas Gregor 0e08ed3d80 constify adjacency list write routines
[SVN r32382]
2006-01-23 19:32:55 +00:00
Douglas Gregor 665b330286 Fix a typo
[SVN r32381]
2006-01-23 19:29:16 +00:00
Vladimir Prus f36e7b9170 Update Jamfile.v2
[SVN r32351]
2006-01-18 12:46:30 +00:00
Jeremiah Willcock 7815e65261 Fixes to uses of shared_ptr
[SVN r32289]
2006-01-11 21:18:26 +00:00
Douglas Gregor eddae97983 boost/pending/property_serialize.hpp:
- Moved serialization code here

boost/pending/property.hpp:
  - From here

boost/graph/adj_list_serialize.hpp:
  - Include the new property_serialization header


[SVN r32275]
2006-01-10 13:53:48 +00:00
Douglas Gregor e96148194d Don't try to use the serialization library on GCC 2.95.3
[SVN r32274]
2006-01-10 13:43:38 +00:00
Jeremy Siek c668929a24 changed std::map to std::vector
[SVN r32252]
2006-01-06 22:16:39 +00:00
Jeremy Siek e5a0f4f5fc blah
[SVN r32251]
2006-01-06 22:09:01 +00:00
Jeremy Siek efd6f46383 changed to be compatible with old properties
[SVN r32250]
2006-01-06 22:03:54 +00:00
Jeremy Siek 61c59d9c1d added support for serialization
[SVN r32249]
2006-01-06 22:03:18 +00:00
Jeremy Siek 727a9d994d minor edit
[SVN r32248]
2006-01-06 22:02:52 +00:00
Jeremy Siek f836ed2531 updated version of the kevin bacon example to use serialization
[SVN r32246]
2006-01-06 21:44:58 +00:00
Jeremy Siek 5b572a82a3 first draft of serialization for adjacency_list
[SVN r32245]
2006-01-06 21:28:29 +00:00
Jeremiah Willcock a1b7e1cd95 Undid commit of altered version of dominator_tree.hpp
[SVN r32243]
2006-01-06 19:22:34 +00:00
Jeremiah Willcock 9df2b90f56 Refactored indexed property code into separate file
[SVN r32242]
2006-01-06 19:20:38 +00:00
Douglas Gregor 183d88cfb6 Oops, fix non-bundled properties support
[SVN r32236]
2006-01-06 14:14:57 +00:00
Douglas Gregor 472dba30ed Bundled properties now work with adjacency_list I/O
[SVN r32235]
2006-01-06 14:01:55 +00:00
Douglas Gregor d8fc6477d7 Start fixing adjacency_list I/O with bundled properties
[SVN r32234]
2006-01-06 13:17:35 +00:00
Douglas Gregor 2a204d5482 Pull in std::floor
[SVN r32229]
2006-01-05 21:57:36 +00:00
Douglas Gregor db9796ddfd sqrt is in namespace std
[SVN r32197]
2006-01-01 17:20:32 +00:00
Vladimir Prus d629b74d98 Update Jamfile.v2
[SVN r32138]
2005-12-22 10:40:28 +00:00
Vladimir Prus 421842272a Update Jamfile.v2: also compile read_graphviz_spirit.
[SVN r32137]
2005-12-22 10:38:18 +00:00
Vladimir Prus c4d72905bf Remove a couple of "signed/unsigned comparison" warnings from gcc.
Note sure how it went unnoticed.


[SVN r32136]
2005-12-22 09:50:23 +00:00
Aaron Windsor f497c3d195 Modified the predicate used by filtered_graph to avoid errors caused by default-initializing iterator property maps uncovered by gcc in _GLIBCXX_DEBUG mode. Included <algorithm> header for std::sort.
[SVN r32127]
2005-12-22 00:09:22 +00:00
Douglas Gregor 86e4dd21af Documentation updates from JongSoo
[SVN r32126]
2005-12-21 15:28:48 +00:00
Douglas Gregor c8ffc289d9 Overhead calculation
[SVN r32120]
2005-12-20 23:04:16 +00:00
Douglas Gregor 5879c83284 Add sorted_erdos_renyi_iterator, from Jeremiah Willcock
[SVN r32119]
2005-12-20 21:59:51 +00:00
Douglas Gregor 8041171b33 Documentation for JongSoo Park's dominator tree implementation
[SVN r32115]
2005-12-20 16:55:11 +00:00
Jeremiah Willcock 1e416130db Removed redundant copy of erdos_renyi_iterator
[SVN r32082]
2005-12-16 21:48:33 +00:00
Douglas Gregor 2e318dccc1 Don't allow the use of the libstdc++ debug mode with this test
[SVN r32009]
2005-12-12 22:01:08 +00:00
Douglas Gregor 02f8dbe592 Initialization fixes for Dijkstra's single-source shortest paths and breadth-first search
[SVN r32000]
2005-12-12 15:53:50 +00:00
Jeremiah Willcock 18586182a1 Fixed bug when running with _GLIBCXX_DEBUG on
[SVN r31972]
2005-12-10 00:50:17 +00:00
Jeremiah Willcock 0d93784f95 Fixed bug in dominator tree code (trying to increment iterator which was erased)
[SVN r31971]
2005-12-09 23:19:38 +00:00
Jeremiah Willcock 9225f94c4b Added qualification to std::time to fix CodeWarrior test failure
[SVN r31970]
2005-12-09 22:54:11 +00:00
Jeremiah Willcock 69317c5bdc Fixed some CSR and Kruskal bugs, plus trying to get more tests to pass
[SVN r31963]
2005-12-09 06:20:49 +00:00
Jeremiah Willcock ada2d70c01 Added extra qualification to try to fix CW9.4 regression failure
[SVN r31959]
2005-12-08 20:44:12 +00:00
Jeremiah Willcock 5271a6bef6 Used different names for different types to try to fix or isolate VC8 regression failures
[SVN r31958]
2005-12-08 20:43:34 +00:00
Douglas Gregor 6937336a09 Merged from Version_1_33_1
[SVN r31949]
2005-12-08 03:23:02 +00:00
Jeremiah Willcock 9ba47b4b7b Changed log2 to log_base_2 because log2 is a macro on some platforms
[SVN r31905]
2005-12-04 18:50:40 +00:00
Jeremiah Willcock bb1fba7555 Attempted portability fixes
[SVN r31903]
2005-12-04 18:45:47 +00:00
Douglas Gregor e87ac08817 Work around min/max stupidities in Visual C++ headers
[SVN r31899]
2005-12-04 17:24:50 +00:00
Jeremiah Willcock cc60980341 Tried to fix VC8 compatibility problem
[SVN r31898]
2005-12-04 05:41:13 +00:00
Jeremiah Willcock 6fe01d0c4c Added more comprehensive CSR tests, and fixed a few m_last_source-related bugs
[SVN r31897]
2005-12-04 05:28:26 +00:00
Jeremiah Willcock 29d60b8e6a Fixed bug in edge_from_index() when used with partially constructed CSR graphs
[SVN r31894]
2005-12-03 22:24:28 +00:00
Jeremiah Willcock 0e2f464666 Added incremental construction functions to compressed_sparse_row_graph, along with tests and documentation
[SVN r31893]
2005-12-03 21:18:49 +00:00
Douglas Gregor 1e42266075 Dominator tree computation, from JongSoo Park
[SVN r31881]
2005-12-02 16:05:55 +00:00
Douglas Gregor aa3dcfb2e1 Add example for CSR graph
[SVN r31880]
2005-12-02 15:24:02 +00:00
Douglas Gregor 9be555c4f5 Do the complete Where Defined thing
[SVN r31879]
2005-12-02 14:13:52 +00:00
Douglas Gregor 8899a047d4 Discuss actual CSR format
[SVN r31878]
2005-12-02 14:12:44 +00:00
Douglas Gregor 6c93d9b187 Improve documentation for CSR graph
[SVN r31877]
2005-12-02 13:58:18 +00:00
Douglas Gregor a5c1c8d953 Improvements and documentation for compressed_sparse_row_graph
[SVN r31871]
2005-12-01 23:42:01 +00:00
Douglas Gregor 80147f664b Add support for internal properties to the CSR graph
[SVN r31869]
2005-12-01 20:55:37 +00:00
Douglas Gregor 7ae0a8d974 Move constructor parameter to match adjacency_list
[SVN r31866]
2005-12-01 18:28:51 +00:00
Douglas Gregor 549f85c80f Compressed sparse row graph type
[SVN r31865]
2005-12-01 18:24:00 +00:00
Rene Rivera 4df63cf4f3 Merge from RC_1_33_0.
[SVN r31706]
2005-11-19 20:40:20 +00:00
Rene Rivera 6466795448 Merge from RC_1_33_0.
[SVN r31704]
2005-11-19 19:56:13 +00:00
Douglas Gregor 4373b57677 Fix typos
[SVN r31147]
2005-09-29 13:36:46 +00:00
Douglas Gregor 97e891fee0 Use named parameters where appropriate
[SVN r31132]
2005-09-27 14:01:18 +00:00
Jeremy Siek cd346002ea changed some stuff, rearranged and added example
[SVN r31022]
2005-09-18 15:18:19 +00:00
Aaron Windsor 48577cde2f Added external vertex index maps to two function calls where they were missing.
[SVN r31015]
2005-09-17 16:00:55 +00:00
Jeremy Siek 0a4891fcf0 added notes about vertex_index default
[SVN r30998]
2005-09-15 15:38:21 +00:00
Jeremy Siek 91e1935e1d added note about default for vertex_index
[SVN r30997]
2005-09-15 15:21:04 +00:00
Jeremy Siek 8fe7018793 fixed range
[SVN r30995]
2005-09-15 14:22:23 +00:00
Douglas Gregor 85e1d7e344 Remove unnecessary typename
[SVN r30990]
2005-09-15 02:05:00 +00:00
Aaron Windsor ca5bbacc2e Made a few cosmetic changes to the code and simplified the loop that walks up blossoms to find nearest common ancestors.
[SVN r30987]
2005-09-14 16:53:18 +00:00
Douglas Gregor b48254406d Add visitor and named parameter support to biconnected_componnets, from Janusz Piwowarski
[SVN r30919]
2005-09-12 15:25:09 +00:00
Douglas Gregor 49ca29e905 Always use log2
[SVN r30916]
2005-09-12 14:58:37 +00:00
Douglas Gregor e10fef2660 Use an integer log2 instead of the double version
[SVN r30892]
2005-09-09 22:15:05 +00:00
Douglas Gregor fddbb9b66e Add matching_test
[SVN r30859]
2005-09-07 19:12:17 +00:00
Douglas Gregor 48867ed3ab Add bibliography entry for Edmonds maximum cardinality matching algorithm
[SVN r30858]
2005-09-07 18:01:43 +00:00
Douglas Gregor 75d3e89442 Add/fix entry for edmonds_maximum_cardinality_matching
[SVN r30850]
2005-09-07 15:45:27 +00:00
Douglas Gregor ba824058ef edmonds_maximum_cardinality_matching, from Aaron Windsor
[SVN r30848]
2005-09-07 15:39:03 +00:00
Stefan Slapeta fe508c8c46 Turn off debug info for layout_test on intel
[SVN r30745]
2005-08-31 08:23:59 +00:00
Douglas Gregor 73a5b07661 Workaround for GCC 2.95.3
[SVN r30646]
2005-08-24 14:25:37 +00:00
Jeremy Siek bbe399a2b0 added default initialization for property::m_value to quiet warning from gcc 4.0.1
[SVN r30629]
2005-08-22 14:47:48 +00:00
Douglas Gregor 786336804e Fully qualify detail namespace
[SVN r30619]
2005-08-22 01:53:37 +00:00
Jeremy Siek 869dab48ef member functions -> free functions
[SVN r30603]
2005-08-18 14:33:47 +00:00
Vladimir Prus b62baf4ec1 Support null_vertex for filtered_graph.
Thanks to Tiago de Paula Peixoto for the bug report.


[SVN r30583]
2005-08-15 06:13:19 +00:00
Douglas Gregor cf9d1521d8 Merged from 1.33.0 release
[SVN r30540]
2005-08-12 13:02:37 +00:00
Douglas Gregor 6df693c448 get_property fix for subgraph
[SVN r30220]
2005-07-22 19:22:00 +00:00
Douglas Gregor 64f732195e Make vertices and edges support len()
[SVN r30189]
2005-07-20 17:05:47 +00:00
Douglas Gregor 034950f993 pickle.cpp: Work around MSVC 7.1 bugs
[SVN r30180]
2005-07-19 16:27:00 +00:00
Douglas Gregor 309f243ea1 Adorn vertex_descriptor
[SVN r30020]
2005-07-12 18:44:02 +00:00
Douglas Gregor 9294975522 Fix blips in inspection report
[SVN r29996]
2005-07-12 03:10:33 +00:00
Douglas Gregor 50bd84a168 Example
[SVN r29995]
2005-07-12 02:37:50 +00:00
Douglas Gregor 7ce3496b77 basic_graph.cpp:
- Fix bugs pointed out by Apple's GCC 4.0.0

page_rank.cpp:
  - Make the "done" version actually work

visitor.hpp:
  - Undefine BGL_VISITOR_EVENT properly


[SVN r29931]
2005-07-07 14:02:32 +00:00
Douglas Gregor 6aca595636 Eliminate unused output_heap function
[SVN r29929]
2005-07-07 13:57:16 +00:00
Douglas Gregor eaffe5d5d0 Eliminate need for unistd.h, isatty
[SVN r29928]
2005-07-07 13:08:00 +00:00
Douglas Gregor 39868b1498 Cannot write to a vec_adj_list_vertex_id_map
[SVN r29915]
2005-07-07 03:33:44 +00:00
Douglas Gregor f11b29f1e7 Add some necessary defines
[SVN r29906]
2005-07-06 13:04:17 +00:00
Douglas Gregor ad169e0261 Eat carriage returns, too
[SVN r29903]
2005-07-05 21:39:51 +00:00
Douglas Gregor 6bc7f34a38 silence a useless MSVC warning
[SVN r29897]
2005-07-05 11:52:49 +00:00
Douglas Gregor ce4eb73bfa Try to turn off optimization for Intel compiler, because it ICEs the compiler
[SVN r29896]
2005-07-05 11:38:39 +00:00
Douglas Gregor 6864b4cb77 Do not use bracket syntax when we're only reading a property map
[SVN r29847]
2005-06-30 18:41:02 +00:00
Douglas Gregor 72ad366ad3 Work around stupid min/max macros, AGAIN
[SVN r29774]
2005-06-24 14:33:32 +00:00
Douglas Gregor c113d0c078 Make relax work when we're searching for longest paths
[SVN r29760]
2005-06-23 19:12:02 +00:00
Douglas Gregor 82e676d99f Fix main signature
[SVN r29740]
2005-06-22 18:25:59 +00:00
Douglas Gregor f11331b2f1 Pickle support
[SVN r29735]
2005-06-22 14:58:25 +00:00
Douglas Gregor 9934fd8da4 Fix constructor call
[SVN r29560]
2005-06-14 13:52:02 +00:00
Douglas Gregor d745a537bf Fix conversion of Python objects to strings
[SVN r29515]
2005-06-10 11:55:59 +00:00
Douglas Gregor 4e3c936503 Deal with macroized max
[SVN r29494]
2005-06-09 15:49:08 +00:00
Douglas Gregor 0e295d01c3 Fix depth_first_search root_vertex for Digraph
[SVN r29476]
2005-06-08 14:05:08 +00:00
Douglas Gregor b9a10e2861 Support root_vertex in depth_first_search
[SVN r29473]
2005-06-08 05:59:57 +00:00
Rene Rivera d76004af71 Fixes to make things compile for CW, and possibly others.
* Makefile; don't output "#line" info to prevent some errors parsing file names.
* *parser.cpp; Remove problematic "#line" directives until these files get regenerated from source.
* *parser.cpp; Add "using namespace std;" as free/malloc, possible others, are used and other fail on more conforming compilers.


[SVN r29347]
2005-06-01 15:32:06 +00:00
Victor A. Wagner Jr. 0fbae0aeff Changed - some double constants to floats to stop data-loss warnings
[SVN r29079]
2005-05-19 22:05:48 +00:00
Douglas Gregor 63a3c9ce83 Update parameter names in non-named parameter version to match those in the named parameter version
[SVN r28775]
2005-05-10 00:19:01 +00:00
Eric Niebler 656907543a min/max fixes
[SVN r28750]
2005-05-09 01:00:41 +00:00
Douglas Gregor 52507c33cf Don't dereference NULL pointers, even though the code will never run
[SVN r28654]
2005-05-04 14:42:38 +00:00
Douglas Gregor 862343d802 Fix some typos
[SVN r28582]
2005-05-02 15:53:01 +00:00
Douglas Gregor c1503a89a5 Edmunds-Karp also requires IncidenceGraph
[SVN r28580]
2005-05-02 15:39:23 +00:00
Douglas Gregor 87588dd9ff Support set_property and get_property
[SVN r28579]
2005-05-02 15:33:35 +00:00
Douglas Gregor c3ec244c89 Documentation and example patch from Andreas Scherer
[SVN r28578]
2005-05-02 15:16:34 +00:00
Douglas Gregor 38b526762a Document which compilers work well with the BGL-Python bindings
[SVN r28418]
2005-04-22 14:28:55 +00:00
Douglas Gregor 41ebb5fbc1 boost/graph/king_ordering.hpp:
- Try to get bind invocation working on vc7

libs/graph/test/bellman-test.cpp:
  - Just don't run parts of this test on vc7 or older

libs/graph/test/gursoy_atun_layout_test.cpp:
  - Pull in names from ::boost so that vc7 can find them.


[SVN r28416]
2005-04-22 14:18:24 +00:00
Douglas Gregor 0a589fd44a Work around broken standard libraries
[SVN r28414]
2005-04-22 13:58:23 +00:00
Douglas Gregor 430aef4b59 Apply Joel's workaround for VC++ 8.0 as well as 7.1
[SVN r28409]
2005-04-22 11:47:48 +00:00
Douglas Gregor 66e61339b1 Turn off debug symbols by default
[SVN r28397]
2005-04-22 02:25:07 +00:00
Douglas Gregor 90f1ec41a4 Jamfile: Use -GR- instead of /GR- to keep bjam from flipping the slash to a backslash
python\Jamfile: Default to linking against the Boost.Python DLL, although we'll have to fix stuff on Mac OS X


[SVN r28396]
2005-04-22 00:32:14 +00:00
Douglas Gregor 289715b159 Turn off optimization for the visualization lib
[SVN r28395]
2005-04-21 23:58:14 +00:00
Douglas Gregor b904a829b6 king_ordering.hpp: Access colors vector with index, not vertex
[SVN r28383]
2005-04-21 14:47:55 +00:00
Joel de Guzman e184561762 Workaround for VC7.1
[SVN r28363]
2005-04-21 05:20:51 +00:00
Douglas Gregor 34bc3a8786 doc/*: Document Python bindings
src/python/basic_graph.cpp src/python/basic_graph.hpp:
  - Add ability to record the names of vertices input via the adjacency list
    reader.

example/python/breadth_first_search.py: Building a better example


[SVN r28350]
2005-04-20 23:45:55 +00:00
Douglas Gregor efc05efebd Document all of the BGL algorithms that are available in the Python bindings.
In some cases, tweak the implementations where they didn't make sense.


[SVN r28344]
2005-04-20 20:08:35 +00:00
Douglas Gregor 9fe51b2a58 cuthill_mckee_ordering.hpp, king_ordering.hpp:
- Use 3-parameter make_iterator_property_map, for stupid compilers

graph_traits.hpp:
  - Work around partial specialization bugs in GCC 2.95.3 and, potentially,
    CodeWarrior <= 9.4

properties.hpp:
  - I think Intel <= 7.1 can handle bundled properties...


[SVN r28338]
2005-04-20 14:57:00 +00:00
Douglas Gregor 631d35bcc2 Started documenting Python bindings
libs/graph/src/python/basic_graph.cpp, libs/graph/src/python/basic_graph.hpp:
  - Allow one to build a graph from anything that looks like a Python list or
    tuple.


[SVN r28324]
2005-04-19 17:01:07 +00:00
Douglas Gregor 003e90151e Deal with local/global issues with subgraph bundled properties
[SVN r28307]
2005-04-18 03:20:16 +00:00
Douglas Gregor 4bc19a1621 boost/graph/cuthill_mckee_ordering.hpp, boost/graph/king_ordering.hpp:
- Remove use of connected components, so we need only one color map
    running around
  - Provide simple overloads, requiring only the graph and the output iterator.

boost/graph/detail/sparse_ordering.hpp:
  - Move out_degree_property_map here

boost/graph/fruchterman_reingold.hpp:
  - Fix enumeration of pairs in grid_force_pairs to repulse vertices in
    adjacent grid cells (in addition to the current cell), so we don't get
    vertices forming crosses on grid lines.
  - Round up the number of rows/columns.

libs/graph/doc/cuthill_mckee_ordering.html, libs/graph/doc/king_ordering.html:
  - Document new overloads

libs/graph/doc/gursoy_atun_layout.html:
  - Add missing semicolon

libs/graph/src/python/cuthill_mckee_ordering.cpp,
libs/graph/test/cuthill_mckee_ordering.cpp:
  - Test and use the new overloads

libs/graph/build/python/Jamfile, libs/graph/src/python/module.cpp,
libs/graph/src/python/king_ordering.cpp:
  - Support King's ordering algorithm from Python

libs/graph/example/python/vis.py:
  - By default, do a "progressive" Fruchterman-Reingold layout

libs/graph/test/king_ordering.cpp:
  - Test new overload


[SVN r28306]
2005-04-17 23:50:43 +00:00
Douglas Gregor ea6d11a47e Fix bundled properties support in filtered_graph adaptor and add it to reverse_graph adaptor
[SVN r28291]
2005-04-17 13:47:52 +00:00
Douglas Gregor 041f615cc3 boost/graph/filtered_graph.hpp, boost/graph/graph_traits.hpp,
boost/graph/subgraph.hpp:
  - Support bundled properties in graph adaptors

libs/graph/test/bundled_properties.cpp:
  - Test subgraph with bundled properties

libs/graph/doc/history.html:
  - Document what we did


[SVN r28265]
2005-04-15 07:23:47 +00:00
Douglas Gregor cfb03e5e10 Work around MSVC6 bugs
[SVN r28258]
2005-04-14 23:14:00 +00:00
Douglas Gregor 5220440e86 Copyright statement and a using directive
[SVN r28257]
2005-04-14 23:08:24 +00:00
Douglas Gregor 9915f79681 Work around bugs in Intel 7.1 compiler and VC6 library
[SVN r28255]
2005-04-14 22:55:14 +00:00
Douglas Gregor 2e67897926 Workaround for standard libraries without templated iterator constructors
[SVN r28254]
2005-04-14 22:22:38 +00:00
Douglas Gregor 1a6a672c6e Prune back the betweenness centrality test graph size
[SVN r28253]
2005-04-14 21:52:57 +00:00
Douglas Gregor 1420cc346d Work around a very picky Tru64 compiler whose asserts don't like to convert
[SVN r28252]
2005-04-14 21:50:09 +00:00
Vladimir Prus 6b15ae6041 Change lib name to match V1
[SVN r28240]
2005-04-14 11:32:36 +00:00
Douglas Gregor 6ae80231b2 Lots of portability fixes throughout the graph library
[SVN r27997]
2005-04-06 03:48:20 +00:00
Douglas Gregor 8d1a7de32f Support mixed-case keywords in GraphViz parser
[SVN r27948]
2005-04-04 02:27:36 +00:00
Douglas Gregor 66ee37fbf4 Test sparse matrix ordering
[SVN r27909]
2005-04-01 20:45:39 +00:00
Douglas Gregor cfc4c1b7d1 Add Sparse Matrix Ordering section, with King, Cuthill-McKee, and MMO algorithms
[SVN r27908]
2005-04-01 20:22:08 +00:00
Douglas Gregor 9eb9501c27 boost/graph/cuthill_mckee_ordering.hpp:
- Support for multiple components
  - Recast as invocation of breadth_first_search

boost/graph/king_ordering.hpp:
  - King's algorithm for sparse matrix ordering

boost/graph/detail/sparse_ordering.hpp:
  - Details for the sparse matrix ordering algorithms

libs/graph/example/king_ordering.cpp,
libs/graph/example/cuthill_mckee_ordering.cpp:
  - Usage examples for the sparse matrix ordering algorithms

libs/graph/doc/bibliography.html, libs/graph/doc/cuthill_mckee_ordering.html,
libs/graph/doc/king_ordering.html:
  - Updated documentation to reflect new implementations

libs/graph/doc/history.html, index_1_33_0.htm:
  - Announcements


[SVN r27907]
2005-04-01 20:18:45 +00:00
Douglas Gregor e3455c28eb src/python/graphviz.cpp, src/python/module.cpp:
- Export GraphViz exceptions to Python

src/python/module.cpp:
  - Support directed graphs

example/python/vis.py:
  - Support directed graphs


[SVN r27890]
2005-03-30 23:35:21 +00:00
Douglas Gregor 08119fe298 Work around floating-point inaccuracy failures
[SVN r27877]
2005-03-30 04:38:23 +00:00
Douglas Gregor bbb0b30dd3 Fix issues with separate compilation of GraphViz reader
[SVN r27870]
2005-03-29 18:36:31 +00:00
Douglas Gregor 2242193f11 Boost Software License conversion
[SVN r27869]
2005-03-29 18:04:18 +00:00
Douglas Gregor 3623623cf9 Converted to Boost Software License
[SVN r27802]
2005-03-24 15:10:49 +00:00
Douglas Gregor e75984a2fb Converted to Boost Software License
[SVN r27801]
2005-03-24 15:06:43 +00:00
Douglas Gregor 2577136447 Converted to Boost Software License
[SVN r27800]
2005-03-24 14:54:12 +00:00
Douglas Gregor 1fa1cd881b Default stylesheet
[SVN r27799]
2005-03-24 14:24:11 +00:00
Douglas Gregor 63be68e1cb Undo a misguided optimization
[SVN r27798]
2005-03-24 14:12:37 +00:00
Douglas Gregor 88c47b4995 Document requirements on property values
[SVN r27786]
2005-03-23 18:53:58 +00:00
Douglas Gregor baea51cfa6 Add random graph generators
[SVN r27785]
2005-03-23 18:45:15 +00:00
Douglas Gregor c6b23e89cf Compiled version of the GraphViz reader
[SVN r27784]
2005-03-23 18:41:06 +00:00
Douglas Gregor 6f84b0e9c8 Compile the GraphViz reader separately, for sanity's sake
[SVN r27783]
2005-03-23 18:40:03 +00:00
Douglas Gregor 1d25fe6892 Be sure to compile with optimization
[SVN r27768]
2005-03-22 20:24:25 +00:00
Douglas Gregor c4b48cd144 Provide typedefs for the adjacency_list selectors
[SVN r27738]
2005-03-18 19:22:50 +00:00
Douglas Gregor fb4e0aebd6 Remove-last-vertex optimization (Vikram Shrowty)
[SVN r27731]
2005-03-18 04:47:40 +00:00
Douglas Gregor 91ccce062e Make bundled properties type accessible
[SVN r27730]
2005-03-18 04:31:29 +00:00
Douglas Gregor 1f0e952ff2 No need to print the JAMUNAME
[SVN r27714]
2005-03-16 22:24:30 +00:00
Douglas Gregor ce4275cf9b Link against boost_python statically, because it's easier
[SVN r27713]
2005-03-16 22:18:30 +00:00
Douglas Gregor 15b83ced14 Sequential vertex coloring
[SVN r27708]
2005-03-16 15:38:35 +00:00
Douglas Gregor e2649f122f Vis stuff
[SVN r27704]
2005-03-16 14:19:09 +00:00
Douglas Gregor 0d9a96fec4 Fixes and tweaks
[SVN r27703]
2005-03-16 14:15:25 +00:00
Douglas Gregor 0e0507520b Add graph generators
[SVN r27678]
2005-03-15 22:44:11 +00:00
Douglas Gregor 65339366d3 Random graph generators
[SVN r27677]
2005-03-15 20:02:54 +00:00
Douglas Gregor 4f9118a1d5 Forward iterators, not input iterators
[SVN r27668]
2005-03-15 14:11:33 +00:00
Douglas Gregor 8f2516eefb Fix typo
[SVN r27653]
2005-03-14 16:53:00 +00:00
Douglas Gregor 6e4ed79c88 More algorithms
[SVN r27652]
2005-03-14 16:39:34 +00:00
Douglas Gregor 5ce0418131 Added is_directed member function
[SVN r27651]
2005-03-14 16:27:52 +00:00
Douglas Gregor 426d8e1244 Don't copy singular iterators
[SVN r27650]
2005-03-14 16:23:54 +00:00
Douglas Gregor 972743058e Add clear() member
[SVN r27649]
2005-03-14 16:16:03 +00:00
Douglas Gregor 8b8d0183dc Scope not1
[SVN r27648]
2005-03-14 15:15:18 +00:00
Douglas Gregor fb2a029e97 Fix for very small graphs
[SVN r27647]
2005-03-14 15:10:27 +00:00
Douglas Gregor 896ddc7d95 ReadablePropertyMap fixes
[SVN r27605]
2005-03-10 19:50:45 +00:00
Douglas Gregor 3ba84d959e Fixes for VC 7.1 and some new algorithms
[SVN r27604]
2005-03-10 19:48:18 +00:00
Vladimir Prus 3c045dd60e Fix the issue with dag_shortest_paths discussed in
http://article.gmane.org/gmane.comp.lib.boost.devel/111573/


[SVN r27596]
2005-03-10 11:19:12 +00:00
Douglas Gregor 76483e6dcc Fix digraph typo
[SVN r27584]
2005-03-08 20:32:48 +00:00
Douglas Gregor 9203aaf140 Compiler workarounds
[SVN r27583]
2005-03-08 20:29:29 +00:00
Douglas Gregor 0c1817ada1 More tests
[SVN r27581]
2005-03-08 19:34:53 +00:00
Douglas Gregor 3bb1276271 Added new algorithms
[SVN r27580]
2005-03-08 19:12:16 +00:00
Douglas Gregor d3d9fdc0e5 Lots of new algorithms and cleanups of old ones
[SVN r27579]
2005-03-08 18:54:45 +00:00
Douglas Gregor 760b7f6c45 Some trivial cleanups
[SVN r27575]
2005-03-08 13:14:18 +00:00
Douglas Gregor 77ca9c37ca Works in progress
[SVN r27561]
2005-03-05 14:59:32 +00:00
Douglas Gregor 1e359e31ed Input file for biconnected_components example
[SVN r27558]
2005-03-04 23:47:57 +00:00
Douglas Gregor f237b9feee Biconnected components support
[SVN r27557]
2005-03-04 23:47:10 +00:00
Douglas Gregor 4167abcb5d Use vertex index maps
[SVN r27556]
2005-03-04 23:45:08 +00:00
Douglas Gregor 852cc06c85 lowpt stores indices, not values
[SVN r27555]
2005-03-04 23:26:26 +00:00
Douglas Gregor 4a0081feb3 BSF and Dijkstra example and test
[SVN r27553]
2005-03-04 15:01:50 +00:00
Douglas Gregor 7c446ad0d4 Copyrightify and licensify
[SVN r27552]
2005-03-04 14:53:56 +00:00
Douglas Gregor a882494f03 Support color maps properly
[SVN r27548]
2005-03-03 21:09:05 +00:00
Douglas Gregor d31c4b5a04 Finalize BFS
[SVN r27547]
2005-03-03 20:40:06 +00:00
Douglas Gregor 961a7d09cc Add support for dijkstra_shortest_paths
[SVN r27546]
2005-03-03 20:11:12 +00:00
Douglas Gregor a8488328b1 Fullly generic BFS, comin' at ya
[SVN r27541]
2005-03-03 17:22:17 +00:00
Douglas Gregor 3cca66df9c PageRank implementation
[SVN r27538]
2005-03-03 14:27:59 +00:00
Douglas Gregor 6bf503fa56 Initial version
[SVN r27536]
2005-03-03 14:06:42 +00:00
Douglas Gregor e88397d209 PageRank for Python
[SVN r27535]
2005-03-03 14:05:12 +00:00
Douglas Gregor cdc7c6fcc8 Build bgl extension module
[SVN r27534]
2005-03-03 13:53:43 +00:00
Douglas Gregor 5754d6d866 Fix directed/undirected checks
[SVN r27531]
2005-03-01 22:52:26 +00:00
Douglas Gregor b9f793cefd Fix a typo
[SVN r27530]
2005-03-01 19:15:05 +00:00
Douglas Gregor 4ebce62921 More qualification to protect against accidentally getting boost::bind instead of phoenix::bind
[SVN r27529]
2005-03-01 19:12:22 +00:00
Douglas Gregor 03368b302f Trivial rearrangement to work around an Apple GCC Bug
[SVN r27528]
2005-03-01 19:11:46 +00:00
Rene Rivera 3390d77e28 Apply typo fixes from Julio M. Merino Vidal
[SVN r27513]
2005-02-27 17:28:24 +00:00
Douglas Gregor c0783b62c0 DFS-based biconnected components, from Janusz Piwowarski
[SVN r27442]
2005-02-20 01:08:11 +00:00
Douglas Gregor 85daa2c5c6 Proofreading fixes from Rich Morin
[SVN r27427]
2005-02-19 16:00:56 +00:00
Douglas Gregor 429f5c9d25 Fix a typo
[SVN r27418]
2005-02-18 15:36:53 +00:00
Douglas Gregor c154f4ff95 Joel is da MAN
[SVN r27298]
2005-02-10 04:14:42 +00:00
Douglas Gregor 1f33664599 Broken example...
[SVN r27276]
2005-02-09 15:26:07 +00:00
Douglas Gregor cc462f60ec write_graphviz supports dynamic_properties now
[SVN r27275]
2005-02-09 15:24:49 +00:00
Douglas Gregor 4864d12d0c New GraphViz example
[SVN r27274]
2005-02-09 15:05:58 +00:00
Douglas Gregor 121f9b26c3 Fix handling of double-quoted property values
[SVN r27256]
2005-02-08 21:04:24 +00:00
Douglas Gregor 414d9cfeee Use minimal test tools
[SVN r27251]
2005-02-08 19:11:20 +00:00
Douglas Gregor a6f984b406 Add Ron Garcia's new GraphViz parser.
[SVN r27250]
2005-02-08 18:58:24 +00:00
Douglas Gregor b02d2011a8 Fix clear
[SVN r27242]
2005-02-08 15:59:42 +00:00
Douglas Gregor 60e424c882 Permit empty attribute lists
[SVN r27241]
2005-02-08 14:52:29 +00:00
Stefan Slapeta 81703b0fb5 fixed some minor issues
[SVN r27240]
2005-02-08 12:46:40 +00:00
Stefan Slapeta 534b3efa0a replaced BOOST_TEST
[SVN r27239]
2005-02-08 12:33:07 +00:00
Stefan Slapeta 500be67439 Replaced BOOST_TEST
[SVN r27050]
2005-02-03 12:27:14 +00:00
Douglas Gregor bbd352bd57 Give queue a swap()
[SVN r27043]
2005-02-02 18:59:11 +00:00
Douglas Gregor 558b1a2fef Always include algorithm header, for swap
[SVN r26939]
2005-01-30 17:14:46 +00:00
Douglas Gregor 216a5a7f12 Do not use atoi, atof
[SVN r26938]
2005-01-30 17:12:45 +00:00
Douglas Gregor 7fecf688bc Reduce reliance on test lib
[SVN r26894]
2005-01-28 08:08:18 +00:00
Douglas Gregor ef5fdd8cc6 Document some known problems
[SVN r26892]
2005-01-28 07:44:25 +00:00
Douglas Gregor bc931e3286 Remove extra template parameters
[SVN r26887]
2005-01-28 07:06:18 +00:00
Douglas Gregor 48d9ef8f54 Deal with min/max issues on Windows
[SVN r26797]
2005-01-21 22:47:58 +00:00
Douglas Gregor 0dc01eca8c Do not use log2, which is C99-only
[SVN r26765]
2005-01-20 21:21:44 +00:00
Douglas Gregor 111151a177 Add umlaut
[SVN r26764]
2005-01-20 20:53:58 +00:00
Douglas Gregor 56bfe6f4b7 Fix node movement for weighted graphs and update documentation
[SVN r26763]
2005-01-20 20:52:46 +00:00
Douglas Gregor 01f0eb9ad3 Fixes from François Dumont
[SVN r26693]
2005-01-14 05:33:42 +00:00
Douglas Gregor 02635807ce Added contains() method to check if a heap contains a certain element
[SVN r26625]
2005-01-04 15:17:40 +00:00
Douglas Gregor 2ffc396f29 boost/pending/relaxed_heap.hpp:
- Relaxed heap data structure implementation

boost/graph/dijkstra_shortest_paths.hpp:
  - Use relaxed heap, with a debugging option allowing one to use the binary
    heap instead

libs/graph/test/relaxed_heap_test.cpp:
  - Comprehensive test of the relaxed heap

libs/graph/test/dijkstra_heap_performance.cpp:
  - Test the performance of the relaxed heap against the binary heap via
    Erdos-Renyi graphs.

libs/graph/test/Jamfile:
  - Introduce tests of relaxed heap

libs/graph/doc/dijkstra_shortest_paths.html:
  - Updated complexity to O(V log V), finally!
  - Cite relaxed heaps paper

libs/graph/doc/bibliography.html:
  - Added relaxed heap reference

index.htm, libs/graph/doc/history.html:
  - Announce introduction of relaxed heap


[SVN r26623]
2005-01-04 14:34:45 +00:00
Douglas Gregor 77ff4c53b8 Fixes for x86 Solaris
[SVN r26622]
2005-01-04 14:20:02 +00:00
Douglas Gregor f2a49988ce Work around bug in GCC 2.95.3 standard library
[SVN r26604]
2004-12-29 16:53:05 +00:00
Douglas Gregor 867851b81f Try to work around GCC 2.95.3 issue with min
[SVN r26603]
2004-12-29 16:41:15 +00:00
Douglas Gregor 5c155ac7a5 Blindly try to work around a CW bug
[SVN r26602]
2004-12-29 16:36:56 +00:00
Douglas Gregor bec9d1c8df Switch random generator to minstd_rand
[SVN r26569]
2004-12-21 20:17:18 +00:00
Douglas Gregor bf9af6d93a Gursoy-Atun layout
[SVN r26567]
2004-12-21 19:59:37 +00:00
Douglas Gregor e92cb8cf50 Better describe the result of add_edge
[SVN r26565]
2004-12-21 16:21:38 +00:00
Douglas Gregor 5b13bec33a Deal with stupid compilers that have min and max macros
[SVN r26564]
2004-12-21 13:48:29 +00:00
Victor A. Wagner Jr. 65f8821e60 Changed - all the \r only to \r\n on windows. CVS should get things all fixed up now
[SVN r26561]
2004-12-20 22:43:49 +00:00
Douglas Gregor dff6200ce2 Make num_edges/num_vertices behavior much more explicit
[SVN r26554]
2004-12-20 15:40:35 +00:00
Douglas Gregor 1d39ccd924 Deal with max when it is a macro
[SVN r26551]
2004-12-20 04:57:04 +00:00
Douglas Gregor 28a1a88128 Bibliography entry for sequential_vertex_coloring
[SVN r26535]
2004-12-16 21:54:19 +00:00
Douglas Gregor 610cecce12 Work around issue with get() and GCC 3.4.3
[SVN r26534]
2004-12-16 16:50:52 +00:00
Douglas Gregor 5604226901 Fixed, documented, and tested sequential_vertex_coloring
[SVN r26533]
2004-12-16 15:50:31 +00:00
Douglas Gregor f27670da66 Move remove_directed_edge_dispatch up, thanks to Jurgen Hunold
[SVN r26529]
2004-12-16 14:03:02 +00:00
Vladimir Prus fc3c19c664 Fix a typo
[SVN r26527]
2004-12-16 12:59:56 +00:00
Douglas Gregor 6b12a2813a Deal with min/max appropriately
[SVN r26520]
2004-12-15 21:57:13 +00:00
Douglas Gregor ba2a9304e8 Don't include sys/time.h
[SVN r26519]
2004-12-15 21:41:43 +00:00
Douglas Gregor a6d2c98a5f Add support for vertex_id parameter to write_graphviz
[SVN r26517]
2004-12-15 20:57:35 +00:00
Douglas Gregor 4ce0965553 Add Hyperworx platform
[SVN r26516]
2004-12-15 20:32:47 +00:00
Douglas Gregor eae6dc4a8e - Fixed remove_out_edge_if for undirected graphs.
- Make in_degree work for undirected graphs


[SVN r26515]
2004-12-15 20:32:23 +00:00
Ronald Garcia 6a4cc8e537 missing close tag for betweenness_centrality link.
[SVN r26499]
2004-12-14 14:49:49 +00:00
Douglas Gregor f1278dca9f Rearrange detail namespace to get rid of order dependencies in function lookup, I hope
[SVN r26441]
2004-12-06 04:14:40 +00:00
Douglas Gregor 30ef8f84ff Graphs with zero vertices have zero connected components
[SVN r26403]
2004-12-02 16:32:05 +00:00
Douglas Gregor 604e5a7a45 Minor fixes and better output
[SVN r26402]
2004-12-02 16:29:55 +00:00
Aleksey Gurtovoy 3ec6d263b8 merge RC_1_32_0 tab fixes
[SVN r26327]
2004-11-28 03:27:25 +00:00
Douglas Gregor 48a0aff91d Add type -> const_type conversion to the challenge list
[SVN r26289]
2004-11-25 07:52:43 +00:00
Douglas Gregor a1078197fd Use union_set, not link, in incremental_components
[SVN r26288]
2004-11-25 07:39:21 +00:00
Douglas Gregor 2d2a71f7aa Add missing include
[SVN r26287]
2004-11-25 06:44:10 +00:00
Douglas Gregor f2a278fad5 Fix parallel edge removal bug
[SVN r26286]
2004-11-25 06:33:10 +00:00
Douglas Gregor 945fb8717c Mention change to undirected_dfs
[SVN r26285]
2004-11-24 17:23:47 +00:00
Douglas Gregor 98187feda4 Converted interior properties example to use bundled properties
[SVN r26284]
2004-11-24 17:23:31 +00:00
Douglas Gregor 9dd1992a9d Data-recursive undirected_dfs from Synge Todo
[SVN r26283]
2004-11-24 17:01:22 +00:00
Douglas Gregor 0c82c42f3d Initialize the predecessor map, dummy
[SVN r26232]
2004-11-18 15:51:29 +00:00
Douglas Gregor 9297879774 Fix for edge function provided by Eyal Farago
[SVN r26231]
2004-11-18 15:48:32 +00:00
Douglas Gregor d34fed2e2a Add root_vertex support to Bellman-Ford shortest paths
[SVN r26189]
2004-11-11 19:34:35 +00:00
Douglas Gregor 26e586237e Fix typos
[SVN r26188]
2004-11-11 18:30:05 +00:00
Douglas Gregor f59a9cdb42 Graph is always const
[SVN r26187]
2004-11-11 18:28:29 +00:00
Douglas Gregor 7d1c1f6c8a Close your tags, dummy
[SVN r26186]
2004-11-11 18:25:42 +00:00
Vladimir Prus 25e2a8e1d8 Fix typo
[SVN r26158]
2004-11-09 09:18:27 +00:00
Douglas Gregor 6229d096e5 Mark biconnected components
[SVN r26106]
2004-11-03 16:30:44 +00:00
Douglas Gregor 8c2a5290ad index.htm, libs/graph/doc/table_of_contents.html:
- Document the existence of the biconnected components algorithm

libs/graph/example/biconnected_components.cpp:
  - Clean up the GraphViz output a bit

libs/graph/doc/figs/biconnected.dot, libs/graph/doc/figs/biconnected.png,
libs/graph/doc/biconnected_components.html:
  - Documentation for biconnected components and articulation points

boost/graph/biconnected_components.hpp:
  - Minor type tweaks


[SVN r26105]
2004-11-03 15:40:09 +00:00
Douglas Gregor e7023ea88a boost/graph/biconnected_components.hpp:
- Fixed computation of articulation points

libs/graph/example/biconnected_components.cpp:
  - Remove the second example graph: we only need one for a good example

libs/graph/test/biconnected_components_test.cpp, libs/graph/test/Jamfile:
  - Randomized testcase verifying the biconnected components & articulation
    points computation. Biconnected components aren't thoroughly tested,
    but articulation points are.


[SVN r26094]
2004-11-03 05:02:30 +00:00
Douglas Gregor 6123fb57e9 boost/graph/biconnected_components.hpp:
- Added support for emitting articulation points (they come for free)
  - Eliminated unused parameters in public interface
  - Provided helper overloads that build the lowpt and discovertime property
    maps themselves.
  - Added articulation_points function that computes only articulation points
    (edge components not included)

libs/graph/example/biconnected_components.cpp:
  - Use some of the new overloads
  - Output articulation points as filled circles


[SVN r26091]
2004-11-02 22:34:26 +00:00
Douglas Gregor 5aa64b9cac Minor fixes
[SVN r26024]
2004-10-31 19:55:15 +00:00
Douglas Gregor 17985eaec5 Use appropriate grid cell size
[SVN r25918]
2004-10-28 15:31:42 +00:00
Douglas Gregor 4a11e36f85 Document FR example
[SVN r25904]
2004-10-27 18:22:57 +00:00
Douglas Gregor a07d79a8d3 Document FR example
[SVN r25903]
2004-10-27 18:21:39 +00:00
Douglas Gregor 048d40185d Fruchterman-Reingold layout example
[SVN r25902]
2004-10-27 18:20:11 +00:00
Douglas Gregor 5f9800a0a7 Testcase illustrating a problem with brittle edge indices in bidirectional graphs with EdgeListS=vecS
[SVN r25897]
2004-10-27 16:40:55 +00:00
Douglas Gregor f3ff95bdd8 build instructions
[SVN r25894]
2004-10-27 14:40:24 +00:00
Douglas Gregor 71b302bc49 Merge from graph_devel_1_33_0 branch
[SVN r25893]
2004-10-27 14:38:15 +00:00
Douglas Gregor 63cfb2e00b Perform fast removal of edges in bidirectional graphs
[SVN r25868]
2004-10-26 01:05:11 +00:00
Douglas Gregor 8d219e56bc Fix assignment from *this
[SVN r25820]
2004-10-21 15:52:28 +00:00
Jeremy Siek 9197a1028f added copyrights
[SVN r25810]
2004-10-20 13:20:19 +00:00
Jeremy Siek 4b6effe849 added copyrights
[SVN r25809]
2004-10-20 13:07:46 +00:00
Douglas Gregor f0057aaa80 Fix a typo
[SVN r25740]
2004-10-15 16:02:23 +00:00
Douglas Gregor 6d118a94d0 Correct a typo
[SVN r25739]
2004-10-15 15:37:34 +00:00
Douglas Gregor 2d5dab5647 Remove Floyd-Warshall from the challenge list
[SVN r25736]
2004-10-15 14:45:09 +00:00
Aleksey Gurtovoy 6593010f65 c++boost.gif -> boost.png replacement
[SVN r25573]
2004-10-05 15:45:52 +00:00
Vladimir Prus d3f694525e Remove calls to non-portable isatty function. Not really good idea to
edit generated files, but don't have time for a nicer solution.


[SVN r25567]
2004-10-05 09:53:15 +00:00
Vladimir Prus 77c424a53d Regenerate the parser again, the previous one used to crash on
some graphs.


[SVN r25477]
2004-09-29 14:28:31 +00:00
Douglas Gregor 896c715e35 using namespace boost should work around some issues for MIPSpro
[SVN r25401]
2004-09-25 13:20:24 +00:00
Douglas Gregor 961d3586a7 Fix interior properties link
[SVN r25379]
2004-09-23 20:30:15 +00:00
Joaquín M. López Muñoz 2341889e69 taken care of BOOST_NO_STDC_NAMESPACE
[SVN r25294]
2004-09-21 09:58:24 +00:00
Douglas Gregor 3b9071cf27 Stupid limits include
[SVN r25159]
2004-09-16 19:58:18 +00:00
Douglas Gregor e7706a3320 Need to have the betweenness centrality test here
[SVN r25158]
2004-09-16 19:57:58 +00:00
Douglas Gregor 0b782a2f7f Work around the lack of a <limits> header
[SVN r25091]
2004-09-14 21:28:18 +00:00
Douglas Gregor 6c7a79387a Work around VC library bug
[SVN r25089]
2004-09-14 21:23:36 +00:00
Douglas Gregor 264620c744 Try to deal with platforms that don't move sin and cos into namespace std
[SVN r25087]
2004-09-14 21:01:04 +00:00
Douglas Gregor b89568dcc5 Renamed
[SVN r25083]
2004-09-14 12:30:48 +00:00
Douglas Gregor fde46d6ee8 Fix BC include
[SVN r25060]
2004-09-13 18:14:14 +00:00
Douglas Gregor b7d9331f0e Make the Graph library pass inspection
[SVN r25045]
2004-09-13 15:36:39 +00:00
Douglas Gregor 1b13e37ec2 Attempt at IBM xlC workaround
[SVN r25024]
2004-09-13 00:16:35 +00:00
Douglas Gregor 41e4d297e8 Attempt at IBM xlC workaround
[SVN r25023]
2004-09-13 00:16:03 +00:00
Douglas Gregor d84342b076 Fix a silly typo
[SVN r24873]
2004-09-02 14:59:32 +00:00
Douglas Gregor 95eeae244b Various fixes for vc7 and Linux
[SVN r24853]
2004-09-01 16:35:57 +00:00
Douglas Gregor ed11fbce92 VC7 can handle member templates; let it
[SVN r24723]
2004-08-24 22:01:04 +00:00
Douglas Gregor e6c0a0b36e Use boost::optional to avoid copying singular iterators
[SVN r24721]
2004-08-24 22:00:33 +00:00
Douglas Gregor ce9e9e0d89 Fix a bunch of little bugs
[SVN r24720]
2004-08-24 21:40:31 +00:00
Douglas Gregor 103a676163 Show output for layout test
[SVN r24719]
2004-08-24 20:33:51 +00:00
John Maddock 0f54780d9b Converted files to the BSL.
[SVN r24614]
2004-08-20 11:10:24 +00:00
Douglas Gregor 5e84be1a7d boost/graph/kamada_kawai_spring_layout.hpp:
- Use T, not double, in layout_tolerance
  - Make layout_tolerance use _relative_ tolerances, only
  - Make default tolerance 0.001, which returns some pleasing graphs

libs/graph/doc/layout_tolerance.html:
  - Document changes


[SVN r24608]
2004-08-19 21:50:19 +00:00
Douglas Gregor 455dae4bfe Test for disconnected graphs and document the change
[SVN r24541]
2004-08-17 21:53:49 +00:00
Douglas Gregor 667f926d1c Really, don't use fabs
[SVN r24540]
2004-08-17 21:33:07 +00:00
Douglas Gregor 46e2920f70 Fix silly error pointed out by Gordon Smith
[SVN r24537]
2004-08-17 20:46:38 +00:00
Douglas Gregor f2a534bf12 Don't use fabs
[SVN r24505]
2004-08-16 14:12:14 +00:00
Douglas Gregor 3082cb5195 Add copyright/license
[SVN r24503]
2004-08-16 13:59:51 +00:00
Douglas Gregor 83ed711d3c Whackin' a few buglets
[SVN r24451]
2004-08-13 02:53:11 +00:00
Douglas Gregor e0356c30ca Moved to BSL
[SVN r24450]
2004-08-12 19:12:28 +00:00
Jeremy Siek 10008230eb changed the test to use Q.update(u) and to use indirect comparison
[SVN r24422]
2004-08-11 20:00:20 +00:00
Jeremy Siek d32278ed01 fixed bug, p == nil() instead of p != nil() in update
[SVN r24421]
2004-08-11 19:56:32 +00:00
Douglas Gregor 0b137f41e2 Fixed some minor errors, but it is still broken
[SVN r24415]
2004-08-11 17:02:09 +00:00
Douglas Gregor 836a69685b Merged the well-tested algorithms on the graph_devel branch to trunk
[SVN r24414]
2004-08-11 15:30:20 +00:00
Jeremy Siek 5de49c9ea3 added a copyright
[SVN r24393]
2004-08-10 18:44:34 +00:00
Douglas Gregor 6965fc78ba Ported to LEDA 4.5
[SVN r24302]
2004-08-05 13:38:36 +00:00
Douglas Gregor d1be6c2495 boost/graph/leda_graph.hpp:
- Ported to new iterator adaptors (actually, iterator_facade)
  - Ported to LEDA 4.5

libs/graph/example/leda-concept-check.cpp, libs/graph/example/leda-graph-eg.cpp
  - Ported to LEDA 4.5


[SVN r24301]
2004-08-05 13:37:22 +00:00
Douglas Gregor e4461f93d5 Qualify make_pair calls
[SVN r24265]
2004-08-03 10:50:26 +00:00
Douglas Gregor d017d8e9e7 Converted to Boost Software License, Version 1.0
[SVN r24096]
2004-07-27 03:43:34 +00:00
Douglas Gregor 34fefcd0f6 Converted to Boost Software License, Version 1.0
[SVN r24055]
2004-07-26 00:32:12 +00:00
Douglas Gregor 008a8c7168 johnson_all_pairs_shortest.hpp: When writing into the distance map, we need
to subtract one from the index in graph g2, which has an extra vertex "s" at
the beginning. Amazing how long this bug persisted...


[SVN r24044]
2004-07-25 17:25:54 +00:00
Rene Rivera db84792f9f Remove tabs in file.
[SVN r24043]
2004-07-25 17:12:17 +00:00
Rene Rivera f3d206f725 Remove tabs in file.
[SVN r24041]
2004-07-25 16:10:20 +00:00
Douglas Gregor 656b0ce32d Doug Gregor->Douglas Gregor
[SVN r24018]
2004-07-25 02:59:30 +00:00
Douglas Gregor 905969f542 Doug Gregor -> Douglas Gregor
[SVN r24016]
2004-07-25 02:29:29 +00:00
Douglas Gregor c3cddc3b96 size should return a size_type
[SVN r23959]
2004-07-22 15:16:38 +00:00
Jeremy Siek b1239433ae made explicit the time complexity requirement for edge
[SVN r23919]
2004-07-21 22:09:06 +00:00
Vladimir Prus 598c2d2478 Do not copy default-constructed interator, which might be signular.
[SVN r23841]
2004-07-20 13:25:48 +00:00
Guillaume Melquiond 145474f398 finally corrected the iterator so that it stops at end of the adjacency matrix, also corrected the get_edge behavior between const and non-const matrix
[SVN r23808]
2004-07-19 20:11:43 +00:00
Douglas Gregor d4125b58f9 Use Boost.Test
[SVN r23800]
2004-07-19 15:54:50 +00:00
Vladimir Prus 4adbd15346 More V2 Jamfile tweaks.
[SVN r23764]
2004-07-19 07:12:45 +00:00
Guillaume Melquiond 29f3336462 return u-1 edges (rather than a random number) for undirected adjacency matrices
[SVN r23694]
2004-07-17 15:46:38 +00:00
Guillaume Melquiond dd45b3d00f avoid dereferencing an end iterator
[SVN r23692]
2004-07-17 15:34:09 +00:00
Jeremy Siek d91f3ba421 changed to use bundled properties
[SVN r23553]
2004-07-14 16:22:33 +00:00
Jeremy Siek f8d6dccdf8 changed to bundled properties
[SVN r23552]
2004-07-14 16:18:38 +00:00
Jeremy Siek faaf1fdac9 changed to use bundled properties
[SVN r23551]
2004-07-14 16:13:49 +00:00
Jeremy Siek 96784e037d changed to use bundled properties
[SVN r23548]
2004-07-14 15:47:50 +00:00
Douglas Gregor e0435ccc26 dijkstra_shortest_paths.hpp: Fix no_init version invocation(Jürgen Hunold)
[SVN r23346]
2004-07-05 15:41:47 +00:00
Eric Niebler 7b66953776 move BOOST_USING_STD_MIN and _MAX and BOOST_PREVENT_MACRO_SUBSTITUTION to the config headers, remove boost/minmax.hpp, update coding guidelines
[SVN r23313]
2004-07-02 01:21:32 +00:00
Douglas Gregor 778835199f filtered_graph.hpp:
- Workaround for IBM Visual Age C++ 6.0 (Matthias Troyer)


[SVN r23303]
2004-07-01 14:46:02 +00:00
Douglas Gregor 220b44fe17 Need to include iostream to use cout
[SVN r23302]
2004-07-01 14:25:20 +00:00
Jeremy Siek 11ba494e4c new file, showing the use of get_property
[SVN r23290]
2004-06-30 16:57:10 +00:00
Jeremy Siek cfc41552e7 removed inf parameter for the no_init version of Dijkstra's
[SVN r23289]
2004-06-30 16:18:43 +00:00
Jeremy Siek 00a2844d66 fixed bug in remove_edge(e, g) for bidirectional graphs.
The problem was that the edge property was not removed from the edge list


[SVN r23288]
2004-06-30 16:09:17 +00:00
Jeremy Siek 4c469946fe added a second test with no properties
[SVN r23287]
2004-06-30 16:08:33 +00:00
Jeremy Siek 10b91f71d1 bug in bidirectional graph remove_edge(e, g)
[SVN r23286]
2004-06-30 15:48:20 +00:00
Douglas Gregor 51d60f9b43 libs/graph/test/edge_list_cc.cpp: Specify all parameters, for VC7 support
libs/graph/test/isomorphism.cpp: Deal with atoi/atof missing from std::
boost/graph//adjacency_matrix.hpp: deal with missing allocator<T>::rebind
boost/graph/graph_test.hpp: Remove unusable default constructor (workaround)
boost/graph/vector_as_graph.hpp: When we say remove, we mean std::remove
status/explicit-failures-markup.xml: mark everything I can't or won't fix


[SVN r23237]
2004-06-29 02:30:29 +00:00
Douglas Gregor cbfc6ec8ed Don't use std::atoi and std::atof directly
[SVN r23217]
2004-06-27 21:06:37 +00:00
Douglas Gregor 73ad3cb092 adjacency_list.hpp:
- Add some more qualification to help VC7 along...


[SVN r23215]
2004-06-27 19:15:55 +00:00
Douglas Gregor eedac55a7d Need to include <cctype> to get std::isspace
[SVN r23214]
2004-06-27 19:01:09 +00:00
Douglas Gregor 34f46c045a graph_test.hpp:
- Change the mysterious x's to v's.
  - Get the constness of the Graphs correct for
    test_readable_vertex_property_graph.


[SVN r23211]
2004-06-27 18:35:37 +00:00
Douglas Gregor 9d467c8df1 properties.hpp:
- Use is_convertible inside is_vertex_bundle. We lose some checking in
    pathological cases, but it's not worth the effort.


[SVN r23172]
2004-06-23 20:55:31 +00:00
Douglas Gregor 9613d2dd8c Disable bundled properties for EDG 2.38, which can't seem to handle
is_vertex_bundle.


[SVN r23171]
2004-06-23 16:49:55 +00:00
Eric Niebler e3dd9042b1 remove std_min and std_max, update minmax coding guidelines
[SVN r23162]
2004-06-23 04:49:48 +00:00
Douglas Gregor cf24fa4ca0 Fix a silly typo
[SVN r23129]
2004-06-20 22:15:40 +00:00
Douglas Gregor 23b3545c8d Overall: Second, more complete and better tested version of bundled properties.
The ->* syntax has been removed. Instead, one may use the member pointer as
the key for the standard get/put functions of property maps. This makes
graph adaptors work with bundled properties (automagically). Also added
support for bundled properties in adjacency_matrix.

index.htm: Announce the addition of bundled properties.

boost/graph/adjacency_list.hpp: Updated to support get/put for bundled
properties.

boost/graph/adjacency_matrix.hpp: Added support for bundled properties.
Suppressed some warnings and fixed a minor bug in add_edge(u, v, ep, g).

boost/graph/properties.hpp: Added property_map specialization for bundled
properties.

libs/graph/doc/*.html: Document uses of bundled properties and direct anyone
not using a broken compiler to bundled properties instead of property lists.

libs/graph/test/bundled_properties.cpp: Test both adjacency_list and
adjacency_matrix, along with filtered_graph. Makes sure all of the bundled
properties operations work.


[SVN r23125]
2004-06-20 03:37:09 +00:00
Douglas Gregor c5b4dccdf4 Directed adjacency_lists don't model Adjacency Matrix
[SVN r23121]
2004-06-18 20:05:11 +00:00
Douglas Gregor 5bc28643d3 Graph concept doesn't include num_vertices or num_edges functions
[SVN r23120]
2004-06-18 16:05:11 +00:00
Douglas Gregor 59d480bd8d Synchronize example description with example code
[SVN r23114]
2004-06-17 15:46:38 +00:00
Vladimir Prus e8d775f806 Update
[SVN r23087]
2004-06-11 11:38:37 +00:00
Douglas Gregor f68d704b60 pending/property.hpp: retag_property_list just shouldn't exist for compilers without partial specialization.
graph/adjacency_list.hpp: Totally turn off bundling for VC++ < 7.1


[SVN r22889]
2004-05-21 16:54:20 +00:00
Douglas Gregor 31b1be9154 adjacency_list.hpp: Work around VC++ 7.1 bug where the compiler thinks that a typedef in a template won't be a class type.
[SVN r22880]
2004-05-21 02:27:56 +00:00
Douglas Gregor ce8344e9ad Overall: introduce bundled properties
index.htm:
  - Announce bundled properties

libs/graph/doc/bundles.html:
  - Document bundled properties

libs/graph/doc/adjacency_list.html:
  - Refer to bundled properties

boost/graph/properties.hpp:
  - Added vertex_bundle and edge_bundle properties for bundling
  - Added bundle_property_map for directly handling bundles

boost/pending/property.hpp:
  - Added retag_property_list metafunction that allows us to add a tag
    to the non-property<> element at the end of a property<> list.

boost/graph/adjacency_list.hpp:
  - Implement bundled properties

libs/graph/test/Jamfile, libs/graph/test/bundled_properties.cpp:
  - Test bundled properties


[SVN r22819]
2004-05-14 05:53:33 +00:00
Douglas Gregor 89476c57dd reverse_graph.hpp: Add null_vertex() to traits
[SVN r22818]
2004-05-14 05:41:53 +00:00
Douglas Gregor 20548378ed graphviz.hpp: Fix output of vertex descriptors for edges
(Mark Purtill  <mpurtill@softwarerevolution.com>)


[SVN r22767]
2004-05-08 16:00:24 +00:00
Jeremy Siek bd8397897e changed the download URL for boost
[SVN r22753]
2004-05-06 21:00:38 +00:00
Jeremy Siek 16cc6fed3c added inv_adjacent_vertices
[SVN r22726]
2004-05-03 20:03:17 +00:00
Jeremy Siek 5e09a7498b added List of BGL Users
[SVN r22664]
2004-04-18 20:46:55 +00:00
Jeremy Siek 6a9e86bb5c added url for KGraph
[SVN r22663]
2004-04-18 20:45:55 +00:00
Jeremy Siek bd938c930f new file
[SVN r22662]
2004-04-18 20:42:32 +00:00
Vladimir Prus edf7ef8641 Subgraph tweaks.
- copy m_global_edge member in copy constructor
- add BOOST_STATIC_ASSERT for (hopefully) better error reporting when
  user forgot to provide edge_index property.


[SVN r22635]
2004-04-15 07:26:57 +00:00
Jeremy Siek b4a9b406c2 changed the concept check for Distance Matrix, and changed to
use vertex index to lookup into the distance matrix


[SVN r22601]
2004-04-04 18:02:00 +00:00
Jeremy Siek 1ef454e8c1 changed vertex_descriptor to vertices_size_type for Distance Matrix
[SVN r22600]
2004-04-04 18:01:16 +00:00
Jeremy Siek 844a2019a9 changed to use get() for accessing w1
[SVN r22599]
2004-04-04 17:32:26 +00:00
Jeremy Siek d965824092 Fixed bug in is_flow() caught by Arun Bhalla.
[SVN r22598]
2004-04-04 13:55:26 +00:00
Jeremy Siek cb1091cae1 filled out documentation
[SVN r22580]
2004-04-02 14:53:15 +00:00
Jeremy Siek 9ae3a8d6d2 added "Where Defined"
[SVN r22577]
2004-04-01 14:04:50 +00:00
Jeremy Siek 1a95b1fff0 fixed remove_edge for bidirectional graphs
[SVN r22576]
2004-04-01 01:30:44 +00:00
Vladimir Prus b6c9531d22 HMTL-encode < and >
[SVN r22572]
2004-03-31 12:40:13 +00:00
Vladimir Prus a9e4a158fe Fix typo
[SVN r22563]
2004-03-29 10:40:32 +00:00
Vladimir Prus ff0ea074ab Add 'null_vertex' support to subgraph.
[SVN r22558]
2004-03-26 16:35:19 +00:00
Vladimir Prus 91b24b6363 An attempt to unbreak vc6.
[SVN r22557]
2004-03-26 16:25:08 +00:00
Vladimir Prus 24403e3f19 Fix build problems with different bison versions.
[SVN r22540]
2004-03-22 06:31:24 +00:00
Jeremy Siek 3ada410bc9 fixed issue about vertices in G^T
[SVN r22538]
2004-03-21 23:32:33 +00:00
Jeremy Siek 2a1889d012 fixed typo
[SVN r22515]
2004-03-17 17:36:31 +00:00
Jeremy Siek 21d9026dbb fixed num_edges() to work with undirected graphs, and also to be O(1)
[SVN r22514]
2004-03-17 17:21:31 +00:00
Jeremy Siek b3cb4f8037 fixed Reference type for inv_adjacency_iterator
[SVN r22480]
2004-03-11 13:39:42 +00:00
Jeremy Siek 279466a85d new file
[SVN r22475]
2004-03-10 13:55:57 +00:00
Jeremy Siek e70fc391b8 fixed the constructor
[SVN r22474]
2004-03-10 13:53:26 +00:00
Jeremy Siek 687befe638 added defaults to inv_adjacency_iterator_generator
[SVN r22473]
2004-03-10 13:52:09 +00:00
Jeremy Siek 32497ce2a2 fixed inv_adjacency_iterator
[SVN r22472]
2004-03-10 13:46:17 +00:00
Eric Niebler d1b0ceea22 remove minmax hack from win32.hpp and fix all places that could be affected by the minmax macros
[SVN r22394]
2004-02-26 18:27:02 +00:00
Jeremy Siek e29266e8a5 removed redundant initialization of member c
[SVN r22264]
2004-02-15 15:50:03 +00:00
Jeremy Siek 3c641d4ec2 EdgeList -> OutEdgeList
[SVN r22240]
2004-02-11 16:12:31 +00:00
Jeremy Siek 04d0248a5a changed vecS to listS for default of EdgeList
[SVN r22239]
2004-02-11 16:07:54 +00:00
Jeremy Siek 02ab786074 added #include <boost/graph/graph_utility.hpp>
[SVN r22231]
2004-02-09 18:45:50 +00:00
Jeremy Siek 17fd766fa5 moved SGB and LEDA stuff to the end
[SVN r22230]
2004-02-09 18:43:01 +00:00
Jeremy Siek de777b9164 added #include <iostream>
[SVN r22229]
2004-02-09 18:39:36 +00:00
Jeremy Siek 1825798f2a added #include <fstream>
[SVN r22228]
2004-02-09 18:37:33 +00:00
Jeremy Siek 508526c98d added #include <boost/graph/graph_utility.hpp>
[SVN r22227]
2004-02-09 18:36:59 +00:00
Jeremy Siek 550aa7d162 fixed size type issues
[SVN r22226]
2004-02-09 18:35:04 +00:00
Jeremy Siek 7a9d91ec88 fixed subgraph_local_property_map::operator[]
m_g -> *m_g


[SVN r22225]
2004-02-09 18:29:31 +00:00
Jeremy Siek b9b9aa5782 removed unused variable
[SVN r22224]
2004-02-09 18:27:27 +00:00
Jeremy Siek d45205e37d int -> size_type
[SVN r22223]
2004-02-09 18:25:32 +00:00
Jeremy Siek d4e507bab8 fixed bug with regards to in_edge_list for undirected graphs
[SVN r22222]
2004-02-09 18:21:05 +00:00
Jeremy Siek 9b53c7b81b changed order of initialization to avoid warnings
[SVN r22221]
2004-02-09 18:17:59 +00:00
Jeremy Siek 30d756a5f6 changed type of u1 and u2 in edge_cmp from vertex1_t to int so that they match the return type of dfs_num[...]
[SVN r22220]
2004-02-09 18:12:00 +00:00
Jeremy Siek e40de5b395 added #include <boost/graph/graph_utility.hpp>
[SVN r22219]
2004-02-09 17:50:41 +00:00
Jeremy Siek 206c17b1e2 added #include <iostream>
[SVN r22218]
2004-02-09 17:01:30 +00:00
Jeremy Siek 6a70bb518f added #include <boost/graph/graph_utility.hpp>
[SVN r22217]
2004-02-09 16:59:26 +00:00
Jeremy Siek 66aa8548f7 added #include <iostream> // needed by graph_utility. -Jeremy
[SVN r22216]
2004-02-09 16:55:51 +00:00
Jeremy Siek a5c6b3d272 added #include <boost/graph/graph_utility.hpp>
[SVN r22215]
2004-02-09 16:52:10 +00:00
Jeremy Siek 60004ef651 added #include <iostream>
[SVN r22214]
2004-02-09 16:49:36 +00:00
Jeremy Siek 0e14818262 changed std::queue to boost::queue
[SVN r22213]
2004-02-09 16:45:42 +00:00
Jeremy Siek 542bf4520b added #include for graph_utility.hpp
[SVN r22212]
2004-02-09 16:38:20 +00:00
Jeremy Siek 5133c85054 fixed bug in get_property, changed -> to .
[SVN r22211]
2004-02-09 16:29:53 +00:00
Jeremy Siek abf4ba7df9 removed unused variable
[SVN r22210]
2004-02-09 16:26:31 +00:00
Jeremy Siek 2cebf15b79 moved the implementation of
bidirectional_graph_helper_with_property::remove_edge
into the class definition to avoid VC++ bug.


[SVN r22189]
2004-02-06 21:39:42 +00:00
Jeremy Siek 3390833f0c new file
[SVN r22179]
2004-02-05 20:48:46 +00:00
Jeremy Siek 12feb5896f added more :'s
[SVN r22178]
2004-02-05 20:48:30 +00:00
Jeremy Siek 71a7b595ad added adjacency_matrix_test
[SVN r22177]
2004-02-05 20:47:49 +00:00
Jeremy Siek b5ded5174e fixed bug in undirected out edge iterator, missing initialization of m_inc
[SVN r22176]
2004-02-05 20:20:55 +00:00
Jeremy Siek 2044110d76 added subgraph_properties.cpp
[SVN r22152]
2004-02-03 14:12:10 +00:00
Jeremy Siek 4110bf69a1 new example
[SVN r22151]
2004-02-03 14:11:56 +00:00
Jeremy Siek 60f612a532 Fixed bug in properties. Global and local properties were not shared,
but they are suppose to be. The problem was that I was using the property
map from the local subgraphs instead of from the global graph.


[SVN r22150]
2004-02-03 14:10:39 +00:00
Jeremy Siek 05888905a8 decreasing running time
[SVN r22139]
2004-02-02 16:17:34 +00:00
Jeremy Siek d755f8f5c3 changed iterator to const_iterator
[SVN r22136]
2004-02-02 14:25:51 +00:00
Jeremy Siek f7fa2e2942 changed to mutable iterator, to match return type of std::set::find, just
in case the std implementation does not provide constant to mutable
iterator conversions for std::set.


[SVN r22081]
2004-01-30 14:29:52 +00:00
Jeremy Siek ad20c88c20 changed back to using std::set::find instead of std::find in edge_dispatch
[SVN r22080]
2004-01-30 14:27:32 +00:00
Jeremy Siek 70a7c5ce02 some edits
[SVN r22055]
2004-01-29 16:27:02 +00:00
Jeremy Siek 8a24790a12 fixed figure reference
[SVN r22036]
2004-01-29 00:42:08 +00:00
Jeremy Siek 697f856843 added -kb
[SVN r22035]
2004-01-29 00:38:05 +00:00
Jeremy Siek 1ad3a206d0 changing to binary
[SVN r22033]
2004-01-29 00:36:50 +00:00
Jeremy Siek 26ccf90eb1 fixed figure reference
[SVN r22030]
2004-01-29 00:25:19 +00:00
Vladimir Prus a11e93caa4 Fix (or rather workaround) the bug which caused second reading
of graphviz file to fail. Looks like the parser is not reenterant.

Patch from anynymous user.


[SVN r21951]
2004-01-26 09:16:16 +00:00
Vladimir Prus 547cd77748 Regenerated bison/flex output.
[SVN r21950]
2004-01-26 09:08:02 +00:00
Vladimir Prus df87cf35fc Clean graphviz parser build a little bit. Include parser files generated
by corresponding bison invocation.

Patch from anonymous user.


[SVN r21949]
2004-01-26 08:58:43 +00:00
Vladimir Prus 9e39cceb5a Remove unused files.
[SVN r21948]
2004-01-26 08:45:57 +00:00
Vladimir Prus 315d6e4196 Remove unneeded files
[SVN r21947]
2004-01-26 08:29:41 +00:00
Vladimir Prus 57a2bff506 Patch from anonymous user to make Makefile work.
[SVN r21945]
2004-01-26 08:13:22 +00:00
Jeremy Siek 23c981d632 performance bug fix
[SVN r21870]
2004-01-21 20:38:59 +00:00
Jeremy Siek ccd8ecee09 fixed more bugs triggered by the changes in input_iterator_archetype
[SVN r21867]
2004-01-21 19:04:09 +00:00
Jeremy Siek c3ad6d91cf fixed a bug brought to light by the change in input_iterator_archetype
[SVN r21865]
2004-01-21 18:55:16 +00:00
Jeremy Siek fbe0af0831 fixed some bugs due to changes in iterator_adaptor::base()
[SVN r21864]
2004-01-21 18:46:08 +00:00
Vladimir Prus 72df35f1fa Set proper licence.
[SVN r21490]
2004-01-05 06:39:42 +00:00
490 changed files with 28624 additions and 9363 deletions
-36
View File
@@ -1,36 +0,0 @@
subproject libs/graph/build ;
SOURCES = graphviz_graph_lex graphviz_digraph_lex
graphviz_graph_parser graphviz_digraph_parser ;
GRAPHVIZ_DEFS(graphviz_graph_parser) =
GRAPHVIZ_GRAPH=boost::GraphvizGraph
GRAPHVIZ_DIRECTED=0
;
GRAPHVIZ_DEFS(graphviz_digraph_parser) =
GRAPHVIZ_GRAPH=boost::GraphvizDigraph
GRAPHVIZ_DIRECTED=1
;
{
rule bgl-lib-file
{
local objects source defs ;
defs = $(DEFINES) ;
for source in $(>)
{
DEFINES = $(defs) $(GRAPHVIZ_DEFS($(source:B))) ;
objects += [ Objects $(source) ] ;
}
LibraryFromObjects $(<) : $(objects) ;
}
local gGENERATOR_FUNCTION(LIB) = bgl-lib-file ;
lib bgl-viz
: ../src/$(SOURCES).cpp
: <sysinclude>$(BOOST_ROOT)
: debug <inlining>on #inlining prevents linker name clashes due to truncation!
;
}
+43 -18
View File
@@ -1,25 +1,50 @@
# Copyright (c) 2002 Trustees of Indiana University
#
# 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)
project boost/graph
: requirements <include>../src
: source-location ../src
;
lib libbgl-viz
: graphviz_graph_lex
graphviz_digraph_lex
graphviz_graph_parser
graphviz_digraph_parser
;
if [ modules.peek : GRAPHVIZ_PARSER ]
{
lib boost_graph
:
graphviz_graph_lex
graphviz_digraph_lex
graphviz_graph_parser
graphviz_digraph_parser
: <define>YY_NO_UNISTD_H
;
obj graphviz_graph_lex : graphviz_lex.ll
: <flex.prefix>bgl_undir_ <define>GRAPHVIZ_DIRECTED=0
<implicit-dependency>graphviz_graph_parser ;
obj graphviz_graph_parser : graphviz_parser.yy
: <bison.prefix>bgl_undir_ <define>GRAPHVIZ_DIRECTED=0 ;
obj graphviz_digraph_lex : graphviz_lex.ll
: <flex.prefix>bgl_dir_ <define>GRAPHVIZ_DIRECTED=1
<implicit-dependency>graphviz_digraph_parser ;
obj graphviz_digraph_parser : graphviz_parser.yy
: <bison.prefix>bgl_dir_ <define>GRAPHVIZ_DIRECTED=1 ;
obj graphviz_graph_lex : graphviz_lex.ll
: <flex.prefix>bgl_undir_ <define>GRAPHVIZ_DIRECTED=0
<implicit-dependency>graphviz_graph_parser ;
obj graphviz_graph_parser : graphviz_parser.yy
: <bison.prefix>bgl_undir_ <define>GRAPHVIZ_DIRECTED=0 ;
obj graphviz_digraph_lex : graphviz_lex.ll
: <flex.prefix>bgl_dir_ <define>GRAPHVIZ_DIRECTED=1
<implicit-dependency>graphviz_digraph_parser ;
obj graphviz_digraph_parser : graphviz_parser.yy
: <bison.prefix>bgl_dir_ <define>GRAPHVIZ_DIRECTED=1 ;
}
else
{
lib boost_graph
:
read_graphviz_spirit.cpp
:
<define>BOOST_GRAPH_NO_LIB=1
<link>shared:<define>BOOST_GRAPH_DYN_LINK=1
# # Intel compiler ICEs if we turn optimization on
<toolset>intel-vc71-win-9.1:<optimization>off
# Without these flags, MSVC 7.1 and 8.0 crash
<toolset>msvc-7.1:<cxxflags>-GR-
<toolset>msvc-8.0:<cxxflags>-GR-
;
}
+138
View File
@@ -0,0 +1,138 @@
<HTML>
<!--
-- Copyright (c) 2004 Kris Beevers
--
-- 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: AStarHeuristic</Title>
<BODY BGCOLOR="#ffffff" LINK="#0000ee" TEXT="#000000" VLINK="#551a8b"
ALINK="#ff0000">
<IMG SRC="../../../boost.png"
ALT="C++ Boost" width="277" height="86">
<BR Clear>
<H1>AStar Heuristic Concept</H1>
This concept defines the interface for the heuristic function of an A*
search, which is responsible for estimating the remaining cost from
some vertex to a goal. The user can create a class that matches this
interface, and then pass objects of the class into <a
href="./astar_search.html"><tt>astar_search()</tt></a> to guide the
order of vertex examination of the search. The heuristic instance
must incorporate any necessary information about goal vertices in the
graph.
For further discussion of the use of heuristics in an A* search, see
the documentation of <a
href="./astar_search.html">astar_search()</a>.
<h3>Refinement of</h3>
<a href="http://www.sgi.com/tech/stl/UnaryFunction.html">Unary
Function</a> (must take a single argument -- a graph vertex -- and
return a cost value) and <a
href="../../utility/CopyConstructible.html">Copy Constructible</a>
(copying a heuristic should be a lightweight operation).
<h3>Notation</h3>
<Table>
<TR>
<TD><tt>H</tt></TD>
<TD>A type that is a model of AStar Heuristic.</TD>
</TR>
<TR>
<TD><tt>h</tt></TD>
<TD>An object of type <tt>H</tt>.</TD>
</TR>
<TR>
<TD><tt>G</tt></TD>
<TD>A type that is a model of Graph.</TD>
</TR>
<TR>
<TD><tt>g</tt></TD>
<TD>An object of type <tt>G</tt>.</TD>
</TR>
<TR>
<TD><tt>u</tt></TD>
<TD>An object of type <tt>boost::graph_traits&lt;G&gt;::vertex_descriptor</tt>.</TD>
</TR>
<TR>
<TD><tt>CostType</tt></TD>
<TD>A type that can be used with the <tt>compare</tt> and
<tt>combine</tt> functions passed to A*.</TD>
</TR>
<TR>
<TD><tt>c</tt></TD>
<TD>An object of type <tt>CostType</tt>.</TD>
</TR>
</table>
<h3>Associated Types</h3>
none
<p>
<h3>Valid Expressions</h3>
<table border>
<tr>
<th>Name</th><th>Expression</th><th>Return Type</th><th>Description</th>
</tr>
<tr>
<td>Call Heuristic</td>
<td><tt>CostType c = h(u)</tt></td>
<td><tt>CostType</tt></td>
<td>
Called for the target of every out edge of a vertex being examined.
</td>
</tr>
</table>
<h3>Models</h3>
<ul>
<li><a href="./astar_heuristic.html"><tt>astar_heuristic</tt></a>
</ul>
<h3>Concept Checking Class</h3>
<pre>
template &lt;class Heuristic, class Graph&gt;
struct AStarHeuristicConcept {
void constraints()
{
function_requires&lt; CopyConstructibleConcept&lt;Heuristic&gt; &gt;();
h(u);
}
Heuristic h;
typename graph_traits&lt;Graph&gt;::vertex_descriptor u;
};
</pre>
<br>
<HR>
<TABLE>
<TR valign=top>
<TD nowrap>Copyright &copy 2004</TD><TD>
<A HREF="http://www.cs.rpi.edu/~beevek/">Kristopher Beevers</A>,
Rensselaer Polytechnic Institute (<A
HREF="mailto:beevek@cs.rpi.edu">beevek@cs.rpi.edu</A>)
</TD></TR></TABLE>
</BODY>
</HTML>
+213
View File
@@ -0,0 +1,213 @@
<HTML>
<!--
-- Copyright (c) 2004 Kris Beevers
--
-- 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: AStarVisitor</Title>
<BODY BGCOLOR="#ffffff" LINK="#0000ee" TEXT="#000000" VLINK="#551a8b"
ALINK="#ff0000">
<IMG SRC="../../../boost.png"
ALT="C++ Boost" width="277" height="86">
<BR Clear>
<H1>AStar Visitor Concept</H1>
This concept defines the visitor interface for <a
href="./astar_search.html"><tt>astar_search()</tt></a>. Users can
define a class with the AStar Visitor interface and pass an object of
the class to <tt>astar_search()</tt>, thereby augmenting the actions
taken during the graph search.
<h3>Refinement of</h3>
<a href="../../utility/CopyConstructible.html">Copy Constructible</a>
(copying a visitor should be a lightweight operation).
<h3>Notation</h3>
<Table>
<TR>
<TD><tt>V</tt></TD>
<TD>A type that is a model of AStar Visitor.</TD>
</TR>
<TR>
<TD><tt>vis</tt></TD>
<TD>An object of type <tt>V</tt>.</TD>
</TR>
<TR>
<TD><tt>G</tt></TD>
<TD>A type that is a model of Graph.</TD>
</TR>
<TR>
<TD><tt>g</tt></TD>
<TD>An object of type <tt>G</tt>.</TD>
</TR>
<TR>
<TD><tt>e</tt></TD>
<TD>An object of type <tt>boost::graph_traits&lt;G&gt;::edge_descriptor</tt>.</TD>
</TR>
<TR>
<TD><tt>s,u,v</tt></TD>
<TD>An object of type <tt>boost::graph_traits&lt;G&gt;::vertex_descriptor</tt>.</TD>
</TR>
<TR>
<TD><tt>d</tt></TD>
<TD>An object of type <tt>DistanceMap</tt>.</TD>
</TR>
<TR>
<TD><tt>WeightMap</tt></TD>
<TD>A type that is a model of <a
href="../../property_map/ReadablePropertyMap.html">Readable Property
Map</a>.</TD>
</TR>
<TR>
<TD><tt>w</tt></TD>
<TD>An object of type <tt>WeightMap</tt>.</TD>
</TR>
</table>
<h3>Associated Types</h3>
none
<p>
<h3>Valid Expressions</h3>
<table border>
<tr>
<th>Name</th><th>Expression</th><th>Return Type</th><th>Description</th>
</tr>
<tr>
<td>Initialize Vertex</td>
<td><tt>vis.initialize_vertex(u, g)</tt></td>
<td><tt>void</tt></td>
<td>
This is invoked on each vertex of the graph when it is first
initialized (i.e., when its property maps are initialized).
</td>
</tr>
<tr>
<td>Discover Vertex</td>
<td><tt>vis.discover_vertex(u, g)</tt></td>
<td><tt>void</tt></td>
<td>
This is invoked when a vertex is first discovered and is added to the
OPEN list.
</td>
</tr>
<tr>
<td>Examine Vertex</td>
<td><tt>vis.examine_vertex(u, g)</tt></td>
<td><tt>void</tt></td>
<td>
This is invoked on a vertex as it is popped from the queue (i.e. it
has the lowest cost on the OPEN list). This happens immediately before
<tt>examine_edge()</tt> is invoked on each of the out-edges of vertex
<tt>u</tt>.
</td>
</tr>
<tr>
<td>Examine Edge</td>
<td><tt>vis.examine_edge(e, g)</tt></td>
<td><tt>void</tt></td>
<td>
This is invoked on every out-edge of each vertex after it is
examined.
</td>
</tr>
<tr>
<td>Edge Relaxed</td>
<td><tt>vis.edge_relaxed(e, g)</tt></td>
<td><tt>void</tt></td>
<td>
Upon examination, if the following condition holds then the edge is
relaxed (the distance of its target vertex is reduced) and this method
is invoked:
<blockquote>
<pre>
tie(u, s) = incident(e, g);
D d_u = get(d, u), d_v = get(d, s);
W w_e = get(w, e);
assert(compare(combine(d_u, w_e), d_s));
</pre>
</blockquote>
</td>
</tr>
<tr>
<td>Edge Not Relaxed</td>
<td><tt>vis.edge_not_relaxed(e, g)</tt></td>
<td><tt>void</tt></td>
<td>
Upon examination, if an edge is not relaxed (see above), then this
method is invoked.
</td>
</tr>
<tr>
<td>Black Target</td>
<td><tt>vis.black_target(e, g)</tt></td>
<td><tt>void</tt></td>
<td>
This is invoked when a vertex that is on the CLOSED list is
``rediscovered'' via a more efficient path, and is re-added to the
OPEN list.
</td>
</tr>
<tr>
<td>Finish Vertex</td>
<td><tt>vis.finish_vertex(u, g)</tt></td>
<td><tt>void</tt></td>
<td>
This is invoked on a vertex when it is added to the CLOSED list, which
happens after all of its out edges have been examined.
</td>
</tr>
</table>
<h3>Models</h3>
<ul>
<li><a href="./astar_visitor.html"><tt>astar_visitor</tt></a>
</ul>
<h3>See also</h3>
<a href="./visitor_concepts.html">Visitor concepts</a>
<br>
<HR>
<TABLE>
<TR valign=top>
<TD nowrap>Copyright &copy 2004</TD><TD>
<A HREF="http://www.cs.rpi.edu/~beevek/">Kristopher Beevers</A>,
Rensselaer Polytechnic Institute (<A
HREF="mailto:beevek@cs.rpi.edu">beevek@cs.rpi.edu</A>)
</TD></TR></TABLE>
</BODY>
</HTML>
+4 -8
View File
@@ -2,19 +2,15 @@
<!--
-- Copyright (c) Jeremy Siek 2000
--
-- Permission to use, copy, modify, distribute and sell this software
-- and its documentation for any purpose is hereby granted without fee,
-- provided that the above copyright notice appears in all copies and
-- that both that copyright notice and this permission notice appear
-- in supporting documentation. Silicon Graphics makes no
-- representations about the suitability of this software for any
-- purpose. It is provided "as is" without express or implied warranty.
-- 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>AdjacencyGraph</Title>
<BODY BGCOLOR="#ffffff" LINK="#0000ee" TEXT="#000000" VLINK="#551a8b"
ALINK="#ff0000">
<IMG SRC="../../../c++boost.gif"
<IMG SRC="../../../boost.png"
ALT="C++ Boost" width="277" height="86">
<BR Clear>
+9 -8
View File
@@ -2,19 +2,15 @@
<!--
-- Copyright (c) Jeremy Siek 2000
--
-- Permission to use, copy, modify, distribute and sell this software
-- and its documentation for any purpose is hereby granted without fee,
-- provided that the above copyright notice appears in all copies and
-- that both that copyright notice and this permission notice appear
-- in supporting documentation. Silicon Graphics makes no
-- representations about the suitability of this software for any
-- purpose. It is provided "as is" without express or implied warranty.
-- 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>AdjacencyMatrix</Title>
<BODY BGCOLOR="#ffffff" LINK="#0000ee" TEXT="#000000" VLINK="#551a8b"
ALINK="#ff0000">
<IMG SRC="../../../c++boost.gif"
<IMG SRC="../../../boost.png"
ALT="C++ Boost" width="277" height="86">
<BR Clear>
@@ -69,6 +65,11 @@ consisting of the edge descriptor if the edge was found.
</TR>
</TABLE>
<H3>Complexity guarantees</H3>
The <TT>edge()</TT> function must return in constant time.
<H3>Models</H3>
<a href="./adjacency_matrix.html"><tt>adjacency_matrix</tt></a>
+26 -9
View File
@@ -2,24 +2,20 @@
<!--
-- Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 2000
--
-- Permission to use, copy, modify, distribute and sell this software
-- and its documentation for any purpose is hereby granted without fee,
-- provided that the above copyright notice appears in all copies and
-- that both that copyright notice and this permission notice appear
-- in supporting documentation. We make no
-- representations about the suitability of this software for any
-- purpose. It is provided "as is" without express or implied warranty.
-- 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: BFSVisitor</Title>
<BODY BGCOLOR="#ffffff" LINK="#0000ee" TEXT="#000000" VLINK="#551a8b"
ALINK="#ff0000">
<IMG SRC="../../../c++boost.gif"
<IMG SRC="../../../boost.png"
ALT="C++ Boost" width="277" height="86">
<BR Clear>
<H1>BFS Visitor Concept</H1>
<H1><img src="figs/python.gif" alt="(Python)"/>BFS Visitor Concept</H1>
This concept defines the visitor interface for <a
href="./breadth_first_search.html"><tt>breadth_first_search()</tt></a>.
@@ -180,6 +176,27 @@ search tree and all of the adjacent vertices have been discovered
<li><a href="./bfs_visitor.html"><tt>bfs_visitor</tt></a>
</ul>
<a name="python"></a><h3>Python</h3>
To implement a model of the <tt>BFSVisitor</tt> concept in Python,
create a new class that derives from the <tt>BFSVisitor</tt> type of
the graph, which will be
named <tt><i>GraphType</i>.BFSVisitor</tt>. The events and syntax are
the same as with visitors in C++. Here is an example for the
Python <tt>bgl.Graph</tt> graph type:
<pre>
class count_tree_edges_bfs_visitor(bgl.Graph.BFSVisitor):
def __init__(self, name_map):
bgl.Graph.BFSVisitor.__init__(self)
self.name_map = name_map
def tree_edge(self, e, g):
(u, v) = (g.source(e), g.target(e))
print "Tree edge ",
print self.name_map[u],
print " -> ",
print self.name_map[v]
</pre>
<h3>See also</h3>
+4 -8
View File
@@ -2,19 +2,15 @@
<!--
-- Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 2000
--
-- Permission to use, copy, modify, distribute and sell this software
-- and its documentation for any purpose is hereby granted without fee,
-- provided that the above copyright notice appears in all copies and
-- that both that copyright notice and this permission notice appear
-- in supporting documentation. We make no
-- representations about the suitability of this software for any
-- purpose. It is provided "as is" without express or implied warranty.
-- 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>BasicMatrix</Title>
<BODY BGCOLOR="#ffffff" LINK="#0000ee" TEXT="#000000" VLINK="#551a8b"
ALINK="#ff0000">
<IMG SRC="../../../c++boost.gif"
<IMG SRC="../../../boost.png"
ALT="C++ Boost" width="277" height="86">
<BR Clear>
+28 -19
View File
@@ -2,24 +2,20 @@
<!--
-- Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 2000
--
-- Permission to use, copy, modify, distribute and sell this software
-- and its documentation for any purpose is hereby granted without fee,
-- provided that the above copyright notice appears in all copies and
-- that both that copyright notice and this permission notice appear
-- in supporting documentation. We make no
-- representations about the suitability of this software for any
-- purpose. It is provided "as is" without express or implied warranty.
-- 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: Bellman Ford Visitor</Title>
<BODY BGCOLOR="#ffffff" LINK="#0000ee" TEXT="#000000" VLINK="#551a8b"
ALINK="#ff0000">
<IMG SRC="../../../c++boost.gif"
<IMG SRC="../../../boost.png"
ALT="C++ Boost" width="277" height="86">
<BR Clear>
<H1>Bellman Ford Visitor Concept</H1>
<H1><img src="figs/python.gif" alt="(Python)"/>Bellman Ford Visitor Concept</H1>
This concept defines the visitor interface for <a
href="./bellman_ford_shortest.html"><tt>bellman_ford_shortest_paths()</tt></a>.
@@ -79,16 +75,6 @@ none
<th>Name</th><th>Expression</th><th>Return Type</th><th>Description</th>
</tr>
<tr>
<td>Initialize Vertex</td>
<td><tt>vis.initialize_vertex(s, g)</tt></td>
<td><tt>void</tt></td>
<td>
This is invoked on every vertex of the graph before the start of the
graph search.
</td>
</tr>
<tr>
<td>Examine Edge</td>
<td><tt>vis.examine_edge(e, g)</tt></td>
@@ -156,6 +142,29 @@ when there is a negative cycle in the graph.
<li><a href="./bellman_visitor.html"><tt>bellman_visitor</tt></a>
</ul>
<a name="python"></a>
<h3>Python</h3>
To implement a model of the <tt>BellmanFordVisitor</tt> concept in Python,
create a new class that derives from the <tt>BellmanFordVisitor</tt> type of
the graph, which will be
named <tt><i>GraphType</i>.BellmanFordVisitor</tt>. The events and syntax are
the same as with visitors in C++. Here is an example for the
Python <tt>bgl.Graph</tt> graph type:
<pre>
class count_tree_edges_bellman_ford_visitor(bgl.Graph.BellmanFordVisitor):
def __init__(self, name_map):
bgl.Graph.BellmanFordVisitor.__init__(self)
self.name_map = name_map
def edge_relaxed(self, e, g):
(u, v) = (g.source(e), g.target(e))
print "Relaxed edge ",
print self.name_map[u],
print " -> ",
print self.name_map[v]
</pre>
<br>
<HR>
+4 -8
View File
@@ -2,19 +2,15 @@
<!--
-- Copyright (c) Jeremy Siek 2000
--
-- Permission to use, copy, modify, distribute and sell this software
-- and its documentation for any purpose is hereby granted without fee,
-- provided that the above copyright notice appears in all copies and
-- that both that copyright notice and this permission notice appear
-- in supporting documentation. Silicon Graphics makes no
-- representations about the suitability of this software for any
-- purpose. It is provided "as is" without express or implied warranty.
-- 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>Bidirectional</Title>
<BODY BGCOLOR="#ffffff" LINK="#0000ee" TEXT="#000000" VLINK="#551a8b"
ALINK="#ff0000">
<IMG SRC="../../../c++boost.gif"
<IMG SRC="../../../boost.png"
ALT="C++ Boost" width="277" height="86">
<BR Clear>
+5 -9
View File
@@ -2,20 +2,16 @@
<!--
-- Copyright (c) Jeremy Siek 2000
--
-- Permission to use, copy, modify, distribute and sell this software
-- and its documentation for any purpose is hereby granted without fee,
-- provided that the above copyright notice appears in all copies and
-- that both that copyright notice and this permission notice appear
-- in supporting documentation. Silicon Graphics makes no
-- representations about the suitability of this software for any
-- purpose. It is provided "as is" without express or implied warranty.
-- 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>Buffer</Title>
</HEAD>
<BODY BGCOLOR="#ffffff" LINK="#0000ee" TEXT="#000000" VLINK="#551a8b"
ALINK="#ff0000">
<IMG SRC="../../../c++boost.gif"
<IMG SRC="../../../boost.png"
ALT="C++ Boost" width="277" height="86">
<BR Clear>
@@ -78,7 +74,7 @@ For a type to model the Buffer concept it must have the following members.
Precondition: <tt>empty()</tt> is <tt>false</tt>.</td>
</tr>
<tr> <td> <tt>void size() const</tt> </td>
<tr> <td> <tt>size_type size() const</tt> </td>
<td> Returns the number of objects in the Buffer.
Invariant: <tt>size() >= 0</tt>. </td>
</tr>
+4 -8
View File
@@ -2,19 +2,15 @@
<!--
-- Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 2000
--
-- Permission to use, copy, modify, distribute and sell this software
-- and its documentation for any purpose is hereby granted without fee,
-- provided that the above copyright notice appears in all copies and
-- that both that copyright notice and this permission notice appear
-- in supporting documentation. We make no
-- representations about the suitability of this software for any
-- purpose. It is provided "as is" without express or implied warranty.
-- 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: ColorValue Concept</Title>
<BODY BGCOLOR="#ffffff" LINK="#0000ee" TEXT="#000000" VLINK="#551a8b"
ALINK="#ff0000">
<IMG SRC="../../../c++boost.gif"
<IMG SRC="../../../boost.png"
ALT="C++ Boost" width="277" height="86">
<BR Clear>
+29 -10
View File
@@ -2,28 +2,24 @@
<!--
-- Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 2000
--
-- Permission to use, copy, modify, distribute and sell this software
-- and its documentation for any purpose is hereby granted without fee,
-- provided that the above copyright notice appears in all copies and
-- that both that copyright notice and this permission notice appear
-- in supporting documentation. We make no
-- representations about the suitability of this software for any
-- purpose. It is provided "as is" without express or implied warranty.
-- 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>DFS Visitor</Title>
<BODY BGCOLOR="#ffffff" LINK="#0000ee" TEXT="#000000" VLINK="#551a8b"
ALINK="#ff0000">
<IMG SRC="../../../c++boost.gif"
<IMG SRC="../../../boost.png"
ALT="C++ Boost" width="277" height="86">
<BR Clear>
<H1>DFS Visitor Concept</H1>
<H1><img src="figs/python.gif" alt="(Python)"/>DFS Visitor Concept</H1>
This concept defines the visitor interface for <a
href="./depth_first_search.html"><tt>depth_first_search()</tt></a>.
Users can define a class with the DFS Visitor interface and pass and
Users can define a class with the DFS Visitor interface and pass an
object of the class to <tt>depth_first_search()</tt>, thereby
augmenting the actions taken during the graph search.
@@ -174,6 +170,29 @@ all the out-edges of <tt>u</tt> have been examined.
<li><a href="./dfs_visitor.html"><tt>dfs_visitor</tt></a>
</ul>
<a name="python"></a>
<h3>Python</h3>
To implement a model of the <tt>DFSVisitor</tt> concept in Python,
create a new class that derives from the <tt>DFSVisitor</tt> type of
the graph, which will be
named <tt><i>GraphType</i>.DFSVisitor</tt>. The events and syntax are
the same as with visitors in C++. Here is an example for the
Python <tt>bgl.Graph</tt> graph type:
<pre>
class count_tree_edges_dfs_visitor(bgl.Graph.DFSVisitor):
def __init__(self, name_map):
bgl.Graph.DFSVisitor.__init__(self)
self.name_map = name_map
def tree_edge(self, e, g):
(u, v) = (g.source(e), g.target(e))
print "Tree edge ",
print self.name_map[u],
print " -> ",
print self.name_map[v]
</pre>
<br>
<HR>
+29 -9
View File
@@ -2,24 +2,20 @@
<!--
-- Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 2000
--
-- Permission to use, copy, modify, distribute and sell this software
-- and its documentation for any purpose is hereby granted without fee,
-- provided that the above copyright notice appears in all copies and
-- that both that copyright notice and this permission notice appear
-- in supporting documentation. We make no
-- representations about the suitability of this software for any
-- purpose. It is provided "as is" without express or implied warranty.
-- 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: Dijkstra Visitor</Title>
<BODY BGCOLOR="#ffffff" LINK="#0000ee" TEXT="#000000" VLINK="#551a8b"
ALINK="#ff0000">
<IMG SRC="../../../c++boost.gif"
<IMG SRC="../../../boost.png"
ALT="C++ Boost" width="277" height="86">
<BR Clear>
<H1>Dijkstra Visitor Concept</H1>
<H1><img src="figs/python.gif" alt="(Python)"/>Dijkstra Visitor Concept</H1>
This concept defines the visitor interface for <a
href="./dijkstra_shortest_paths.html"><tt>dijkstra_shortest_paths()</tt></a>
@@ -184,6 +180,30 @@ search tree and all of the adjacent vertices have been discovered
<li><a href="./dijkstra_visitor.html"><tt>dijkstra_visitor</tt></a>
</ul>
<a name="python"></a>
<h3>Python</h3>
To implement a model of the <tt>DijkstraVisitor</tt> concept in Python,
create a new class that derives from the <tt>DijkstraVisitor</tt> type of
the graph, which will be
named <tt><i>GraphType</i>.DijkstraVisitor</tt>. The events and syntax are
the same as with visitors in C++. Here is an example for the
Python <tt>bgl.Graph</tt> graph type:
<pre>
class count_tree_edges_dijkstra_visitor(bgl.Graph.DijkstraVisitor):
def __init__(self, name_map):
bgl.Graph.DijkstraVisitor.__init__(self)
self.name_map = name_map
def edge_relaxed(self, e, g):
(u, v) = (g.source(e), g.target(e))
print "Relaxed edge ",
print self.name_map[u],
print " -> ",
print self.name_map[v]
</pre>
<br>
<HR>
<TABLE>
+4 -8
View File
@@ -2,19 +2,15 @@
<!--
-- Copyright (c) Jeremy Siek 2000
--
-- Permission to use, copy, modify, distribute and sell this software
-- and its documentation for any purpose is hereby granted without fee,
-- provided that the above copyright notice appears in all copies and
-- that both that copyright notice and this permission notice appear
-- in supporting documentation. Silicon Graphics makes no
-- representations about the suitability of this software for any
-- purpose. It is provided "as is" without express or implied warranty.
-- 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>EdgeListGraph</Title>
<BODY BGCOLOR="#ffffff" LINK="#0000ee" TEXT="#000000" VLINK="#551a8b"
ALINK="#ff0000">
<IMG SRC="../../../c++boost.gif"
<IMG SRC="../../../boost.png"
ALT="C++ Boost" width="277" height="86">
<BR Clear>
+4 -8
View File
@@ -2,19 +2,15 @@
<!--
-- Copyright (c) Jeremy Siek 2001
--
-- Permission to use, copy, modify, distribute and sell this software
-- and its documentation for any purpose is hereby granted without fee,
-- provided that the above copyright notice appears in all copies and
-- that both that copyright notice and this permission notice appear
-- in supporting documentation. Silicon Graphics makes no
-- representations about the suitability of this software for any
-- purpose. It is provided "as is" without express or implied warranty.
-- 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>Edge Mutable Graph</Title>
<BODY BGCOLOR="#ffffff" LINK="#0000ee" TEXT="#000000" VLINK="#551a8b"
ALINK="#ff0000">
<IMG SRC="../../../c++boost.gif"
<IMG SRC="../../../boost.png"
ALT="C++ Boost" width="277" height="86">
<BR Clear>
+4 -8
View File
@@ -2,19 +2,15 @@
<!--
-- Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 2000
--
-- Permission to use, copy, modify, distribute and sell this software
-- and its documentation for any purpose is hereby granted without fee,
-- provided that the above copyright notice appears in all copies and
-- that both that copyright notice and this permission notice appear
-- in supporting documentation. We make no
-- representations about the suitability of this software for any
-- purpose. It is provided "as is" without express or implied warranty.
-- 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: EventVisitor</Title>
<BODY BGCOLOR="#ffffff" LINK="#0000ee" TEXT="#000000" VLINK="#551a8b"
ALINK="#ff0000">
<IMG SRC="../../../c++boost.gif"
<IMG SRC="../../../boost.png"
ALT="C++ Boost" width="277" height="86">
<BR Clear>
+4 -8
View File
@@ -2,19 +2,15 @@
<!--
-- Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 2000
--
-- Permission to use, copy, modify, distribute and sell this software
-- and its documentation for any purpose is hereby granted without fee,
-- provided that the above copyright notice appears in all copies and
-- that both that copyright notice and this permission notice appear
-- in supporting documentation. We make no
-- representations about the suitability of this software for any
-- purpose. It is provided "as is" without express or implied warranty.
-- 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: EventVisitorList</Title>
<BODY BGCOLOR="#ffffff" LINK="#0000ee" TEXT="#000000" VLINK="#551a8b"
ALINK="#ff0000">
<IMG SRC="../../../c++boost.gif"
<IMG SRC="../../../boost.png"
ALT="C++ Boost" width="277" height="86">
<BR Clear>
+7 -12
View File
@@ -2,19 +2,15 @@
<!--
-- Copyright (c) Jeremy Siek 2000
--
-- Permission to use, copy, modify, distribute and sell this software
-- and its documentation for any purpose is hereby granted without fee,
-- provided that the above copyright notice appears in all copies and
-- that both that copyright notice and this permission notice appear
-- in supporting documentation. Silicon Graphics makes no
-- representations about the suitability of this software for any
-- purpose. It is provided "as is" without express or implied warranty.
-- 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>Graph</Title>
<BODY BGCOLOR="#ffffff" LINK="#0000ee" TEXT="#000000" VLINK="#551a8b"
ALINK="#ff0000">
<IMG SRC="../../../c++boost.gif"
<IMG SRC="../../../boost.png"
ALT="C++ Boost" width="277" height="86">
<BR Clear>
@@ -26,8 +22,7 @@ Graph
<P>
The Graph concept contains a few requirements that are common to all
the graph concepts. These include some associated types for
<tt>vertex_descriptor</tt>, <tt>edge_descriptor</tt>, etc., and the
<tt>num_vertices()</tt> and <tt>num_edges()</tt> functions. One should
<tt>vertex_descriptor</tt>, <tt>edge_descriptor</tt>, etc. One should
note that a model of Graph is <B>not</B> required to be a model of <a
href="http://www.sgi.com/tech/stl/Assignable.html">Assignable</a>,
so algorithms should pass graph objects by reference.
@@ -75,7 +70,7 @@ and <a href="http://www.sgi.com/tech/stl/EqualityComparable.html">Equality Compa
<tr>
<td><pre>boost::graph_traits&lt;G&gt;::directed_category</pre>
The choices are <TT>directed_tag</TT> and <TT>undirected_tag</TT>.
This type shall be convertible to <TT>directed_tag</TT> or <TT>undirected_tag</TT>.
</td>
</tr>
@@ -106,7 +101,7 @@ graph can be visited. The choices are <TT>incidence_graph_tag</TT>,
<tr>
<td><pre>boost::graph_traits&lt;G&gt;::null_vertex()</pre></td></TD>
<td>
Returns a special <tt>vertex_descriptor</tt> object which does not refer to
Returns a special <tt>boost::graph_traits&lt;G&gt;::vertex_descriptor</tt> object which does not refer to
any vertex of graph object which type is <tt>G</tt>.
<td>
</tr>
+6 -10
View File
@@ -2,19 +2,15 @@
<!--
-- Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 2000
--
-- Permission to use, copy, modify, distribute and sell this software
-- and its documentation for any purpose is hereby granted without fee,
-- provided that the above copyright notice appears in all copies and
-- that both that copyright notice and this permission notice appear
-- in supporting documentation. We make no
-- representations about the suitability of this software for any
-- purpose. It is provided "as is" without express or implied warranty.
-- 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>IncidenceGraph</Title>
<BODY BGCOLOR="#ffffff" LINK="#0000ee" TEXT="#000000" VLINK="#551a8b"
ALINK="#ff0000">
<IMG SRC="../../../c++boost.gif"
<IMG SRC="../../../boost.png"
ALT="C++ Boost" width="277" height="86">
<BR Clear>
@@ -169,13 +165,13 @@ Therefore, the extra requirement is added that the out-edge connecting
function_requires&lt; GraphConcept&lt;G&gt; &gt;();
function_requires&lt; MultiPassInputIteratorConcept&lt;out_edge_iterator&gt; &gt;();
p = out_edges(v, g);
p = out_edges(u, g);
e = *p.first;
u = source(e, g);
v = target(e, g);
}
void const_constraints(const G&amp; g) {
p = out_edges(v, g);
p = out_edges(u, g);
e = *p.first;
u = source(e, g);
v = target(e, g);
+4 -8
View File
@@ -2,19 +2,15 @@
<!--
-- Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 2000
--
-- Permission to use, copy, modify, distribute and sell this software
-- and its documentation for any purpose is hereby granted without fee,
-- provided that the above copyright notice appears in all copies and
-- that both that copyright notice and this permission notice appear
-- in supporting documentation. We make no
-- representations about the suitability of this software for any
-- purpose. It is provided "as is" without express or implied warranty.
-- 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>IteratorConstructibleGraph</Title>
<BODY BGCOLOR="#ffffff" LINK="#0000ee" TEXT="#000000" VLINK="#551a8b"
ALINK="#ff0000">
<IMG SRC="../../../c++boost.gif"
<IMG SRC="../../../boost.png"
ALT="C++ Boost" width="277" height="86">
<BR Clear>
+6
View File
@@ -1,3 +1,9 @@
# Copyright (c) 2002 Trustees of Indiana University
#
# 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)
DVIPS = dvips
LATEX = latex
+4 -8
View File
@@ -2,19 +2,15 @@
<!--
-- Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 2001
--
-- Permission to use, copy, modify, distribute and sell this software
-- and its documentation for any purpose is hereby granted without fee,
-- provided that the above copyright notice appears in all copies and
-- that both that copyright notice and this permission notice appear
-- in supporting documentation. We make no
-- representations about the suitability of this software for any
-- purpose. It is provided "as is" without express or implied warranty.
-- 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>Monoid</Title>
<BODY BGCOLOR="#ffffff" LINK="#0000ee" TEXT="#000000" VLINK="#551a8b"
ALINK="#ff0000">
<IMG SRC="../../../c++boost.gif"
<IMG SRC="../../../boost.png"
ALT="C++ Boost" width="277" height="86">
<BR Clear>
+4 -8
View File
@@ -2,19 +2,15 @@
<!--
-- Copyright (c) Jeremy Siek 2000
--
-- Permission to use, copy, modify, distribute and sell this software
-- and its documentation for any purpose is hereby granted without fee,
-- provided that the above copyright notice appears in all copies and
-- that both that copyright notice and this permission notice appear
-- in supporting documentation. Silicon Graphics makes no
-- representations about the suitability of this software for any
-- purpose. It is provided "as is" without express or implied warranty.
-- 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>MutableGraph</Title>
<BODY BGCOLOR="#ffffff" LINK="#0000ee" TEXT="#000000" VLINK="#551a8b"
ALINK="#ff0000">
<IMG SRC="../../../c++boost.gif"
<IMG SRC="../../../boost.png"
ALT="C++ Boost" width="277" height="86">
<BR Clear>
+6 -10
View File
@@ -2,19 +2,15 @@
<!--
-- Copyright (c) Jeremy Siek 2000
--
-- Permission to use, copy, modify, distribute and sell this software
-- and its documentation for any purpose is hereby granted without fee,
-- provided that the above copyright notice appears in all copies and
-- that both that copyright notice and this permission notice appear
-- in supporting documentation. Silicon Graphics makes no
-- representations about the suitability of this software for any
-- purpose. It is provided "as is" without express or implied warranty.
-- 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>MutablePropertyGraph</Title>
<BODY BGCOLOR="#ffffff" LINK="#0000ee" TEXT="#000000" VLINK="#551a8b"
ALINK="#ff0000">
<IMG SRC="../../../c++boost.gif"
<IMG SRC="../../../boost.png"
ALT="C++ Boost" width="277" height="86">
<BR Clear>
@@ -97,14 +93,14 @@ the value of the properties can be given.
<tr>
<TD><TT>add_edge(u,&nbsp;v,&nbsp;ep,&nbsp;g)</TT></TD>
<TD>Inserts the edge <i>(u,v)</i> into the graph, and
copies object <TT>ep</TT> into the property property for that edge.<br>
copies object <TT>ep</TT> into the property for that edge.<br>
Return type: <TT>std::pair&lt;edge_descriptor, bool&gt;</TT></TD>
</TR>
<tr>
<TD><TT>add_vertex(vp,&nbsp;g)</TT></TD>
<TD>
Add a new vertex to the graph and copy <TT>vp</TT> into the property
Add a new vertex to the graph and copy <TT>vp</TT> into the
property for the new vertex. The <TT>vertex_descriptor</TT> for the new
vertex is returned.<br>
Return type: <TT>vertex_descriptor</TT>
+4 -8
View File
@@ -2,19 +2,15 @@
<!--
-- Copyright (c) Jeremy Siek 2000
--
-- Permission to use, copy, modify, distribute and sell this software
-- and its documentation for any purpose is hereby granted without fee,
-- provided that the above copyright notice appears in all copies and
-- that both that copyright notice and this permission notice appear
-- in supporting documentation. Silicon Graphics makes no
-- representations about the suitability of this software for any
-- purpose. It is provided "as is" without express or implied warranty.
-- 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>PropertyGraph</Title>
<BODY BGCOLOR="#ffffff" LINK="#0000ee" TEXT="#000000" VLINK="#551a8b"
ALINK="#ff0000">
<IMG SRC="../../../c++boost.gif"
<IMG SRC="../../../boost.png"
ALT="C++ Boost" width="277" height="86">
<BR Clear>
+4 -8
View File
@@ -2,19 +2,15 @@
<!--
-- Copyright (c) Jeremy Siek 2000
--
-- Permission to use, copy, modify, distribute and sell this software
-- and its documentation for any purpose is hereby granted without fee,
-- provided that the above copyright notice appears in all copies and
-- that both that copyright notice and this permission notice appear
-- in supporting documentation. Silicon Graphics makes no
-- representations about the suitability of this software for any
-- purpose. It is provided "as is" without express or implied warranty.
-- 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>Property</Title>
<BODY BGCOLOR="#ffffff" LINK="#0000ee" TEXT="#000000" VLINK="#551a8b"
ALINK="#ff0000">
<IMG SRC="../../../c++boost.gif"
<IMG SRC="../../../boost.png"
ALT="C++ Boost" width="277" height="86">
<BR Clear>
+4 -8
View File
@@ -2,19 +2,15 @@
<!--
-- Copyright (c) Jeremy Siek 2000
--
-- Permission to use, copy, modify, distribute and sell this software
-- and its documentation for any purpose is hereby granted without fee,
-- provided that the above copyright notice appears in all copies and
-- that both that copyright notice and this permission notice appear
-- in supporting documentation. Silicon Graphics makes no
-- representations about the suitability of this software for any
-- purpose. It is provided "as is" without express or implied warranty.
-- 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>VertexAndEdgeListGraph</Title>
<BODY BGCOLOR="#ffffff" LINK="#0000ee" TEXT="#000000" VLINK="#551a8b"
ALINK="#ff0000">
<IMG SRC="../../../c++boost.gif"
<IMG SRC="../../../boost.png"
ALT="C++ Boost" width="277" height="86">
<BR Clear>
+4 -8
View File
@@ -2,19 +2,15 @@
<!--
-- Copyright (c) Jeremy Siek 2000
--
-- Permission to use, copy, modify, distribute and sell this software
-- and its documentation for any purpose is hereby granted without fee,
-- provided that the above copyright notice appears in all copies and
-- that both that copyright notice and this permission notice appear
-- in supporting documentation. Silicon Graphics makes no
-- representations about the suitability of this software for any
-- purpose. It is provided "as is" without express or implied warranty.
-- 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>VertexListGraph</Title>
<BODY BGCOLOR="#ffffff" LINK="#0000ee" TEXT="#000000" VLINK="#551a8b"
ALINK="#ff0000">
<IMG SRC="../../../c++boost.gif"
<IMG SRC="../../../boost.png"
ALT="C++ Boost" width="277" height="86">
<BR Clear>
+4 -8
View File
@@ -2,19 +2,15 @@
<!--
-- Copyright (c) Jeremy Siek 2001
--
-- Permission to use, copy, modify, distribute and sell this software
-- and its documentation for any purpose is hereby granted without fee,
-- provided that the above copyright notice appears in all copies and
-- that both that copyright notice and this permission notice appear
-- in supporting documentation. Silicon Graphics makes no
-- representations about the suitability of this software for any
-- purpose. It is provided "as is" without express or implied warranty.
-- 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>Vertex Mutable Graph</Title>
<BODY BGCOLOR="#ffffff" LINK="#0000ee" TEXT="#000000" VLINK="#551a8b"
ALINK="#ff0000">
<IMG SRC="../../../c++boost.gif"
<IMG SRC="../../../boost.png"
ALT="C++ Boost" width="277" height="86">
<BR Clear>
+4 -8
View File
@@ -2,19 +2,15 @@
<!--
-- Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 2000
--
-- Permission to use, copy, modify, distribute and sell this software
-- and its documentation for any purpose is hereby granted without fee,
-- provided that the above copyright notice appears in all copies and
-- that both that copyright notice and this permission notice appear
-- in supporting documentation. We make no
-- representations about the suitability of this software for any
-- purpose. It is provided "as is" without express or implied warranty.
-- 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: Acknowledgements</Title>
<BODY BGCOLOR="#ffffff" LINK="#0000ee" TEXT="#000000" VLINK="#551a8b"
ALINK="#ff0000">
<IMG SRC="../../../c++boost.gif"
<IMG SRC="../../../boost.png"
ALT="C++ Boost" width="277" height="86">
<BR Clear>
+10 -3
View File
@@ -1,4 +1,11 @@
<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>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
@@ -9,7 +16,7 @@
<body bgcolor="#FFFFFF" text="#000000">
<img src="../../../c++boost.gif" alt="c++boost.gif (8819 bytes)"
<img src="../../../boost.png" alt="boost.png (6897 bytes)"
align="center" width="277" height="86">
<h1>Adjacency Iterator Adaptor</h1>
@@ -35,7 +42,7 @@ namespace boost {
template &lt;class Graph, class VertexDescriptor, class OutEdgeIter&gt;
class adjacency_iterator_generator {
public:
typedef <a href="../../utility/iterator_adaptors.htm#iterator_adaptor">iterator_adaptor</a>&lt;...&gt; type;
typedef <a href="../../iterator/doc/iterator_adaptor.html">iterator_adaptor</a>&lt;...&gt; type;
};
}
</pre>
@@ -113,7 +120,7 @@ concept, except that the <tt>reference</tt> type is the same as the <tt>value_ty
so <tt>operator*()</tt> returns by-value. In addition it has the following constructor:
<pre>
adjacency_iterator_generator::type(const OutEdgeIter&amp; it)
adjacency_iterator_generator::type(const OutEdgeIter&amp; it, const Graph* g)
</pre>
<hr>
+91 -20
View File
@@ -2,19 +2,15 @@
<!--
-- Copyright (c) Jeremy Siek 2000
--
-- Permission to use, copy, modify, distribute and sell this software
-- and its documentation for any purpose is hereby granted without fee,
-- provided that the above copyright notice appears in all copies and
-- that both that copyright notice and this permission notice appear
-- in supporting documentation. Jeremy Siek makes no
-- representations about the suitability of this software for any
-- purpose. It is provided "as is" without express or implied warranty.
-- 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: Adjacency List</Title>
<BODY BGCOLOR="#ffffff" LINK="#0000ee" TEXT="#000000" VLINK="#551a8b"
ALINK="#ff0000">
<IMG SRC="../../../c++boost.gif"
<IMG SRC="../../../boost.png"
ALT="C++ Boost" width="277" height="86">
<BR Clear>
@@ -75,7 +71,7 @@ representation of an undirected graph.
<TABLE>
<CAPTION ALIGN="BOTTOM"><STRONG>Figure 2:</STRONG> Adjacency List Representation of an Undirected Graph.</CAPTION>
<TR><TD><IMG SRC="./figs/undir-adj-matrix-graph2.gif" width="260" height="240"></TD>
<TD><IMG SRC="./figs/undir-adj-list2.gif" width="62" height="122"></TD></TR>
<TD><IMG SRC="./figs/undir-adj-list.gif" width="62" height="122"></TD></TR>
</TABLE>
</DIV><P></P>
@@ -141,7 +137,7 @@ shows how to represent a family tree with a graph.
<TR><TD><TT>EdgeList</TT></TD>
<TD>The selector for the container used to represent the
edge-list for the graph.</TD>
<TD><TT>vecS</TT></TD>
<TD><TT>listS</TT></TD>
</TR>
</TABLE>
@@ -153,15 +149,18 @@ shows how to represent a family tree with a graph.
<a href="./VertexAndEdgeListGraph.html">VertexAndEdgeListGraph</a>,
<a href="./MutablePropertyGraph.html">MutablePropertyGraph</a>,
<a href="../../utility/CopyConstructible.html">CopyConstructible</a>,
and <a href="../../utility/Assignable.html">Assignable</a>.
<a href="../../utility/Assignable.html">Assignable</a>,
and <a href="../../serialization/doc/index.html">Serializable</a>.
<P>
<H3>Where Defined</H3>
<P>
<a href="../../../boost/graph/adjacency_list.hpp"><TT>boost/graph/adjacency_list.hpp</TT></a>
<a href="../../../boost/graph/adjacency_list.hpp"><TT>boost/graph/adjacency_list.hpp</TT></a><br><br>
Also, the serialization functionality is in
<a href="../../../boost/graph/adj_list_serialize.hpp"><tt>boost/graph/adj_list_serialize.hpp</tt></a>.
<P>
<H2>Vertex and Edge Properties</H2>
@@ -177,7 +176,10 @@ HREF="./using_adjacency_list.html#sec:adjacency-list-properties">Internal
Properties </A>. The property maps are objects that implement the
interface defined in Section <A
HREF="../../property_map/property_map.html">Property Map
Concepts</A>. The property maps obtained from the
Concepts</A> or may be <a href="bundles.html">bundled properties</a>,
which have a more succinct syntax. The types of all property values
must be Copy Constructible, Assignable, and Default Constructible.
The property maps obtained from the
<TT>adjacency_list</TT> class are models of the <a
href="../../property_map/LvaluePropertyMap.html">Lvalue Property
Map</a> concept. If the <TT>adjacency_list</TT> is const,
@@ -413,6 +415,13 @@ The <tt>adjacency_iterator</tt> models the same iterator concept
as <tt>out_edge_iterator</tt>.
<hr>
<tt>adjacency_list::inv_adjacency_iterator</tt>
<br><br>
The type for the iterators returned by <TT>inv_adjacent_vertices()</TT>.
The <tt>inv_adjacency_iterator</tt> models the same iterator concept
as <tt>out_edge_iterator</tt>.
<hr>
<tt>graph_traits&lt;adjacency_list&gt;::directed_category</tt><br>
and<br>
<tt>adjacency_list_traits&lt;OutEdgeList, VertexList, Directed&gt;::directed_category</tt>
@@ -473,6 +482,30 @@ The property value type for the graph property specified by the
<hr>
<tt>adjacency_list::out_edge_list_selector</tt>
<br><br>
The type <tt>OutEdgeListS</tt>.
<hr>
<tt>adjacency_list::vertex_list_selector</tt>
<br><br>
The type <tt>VertexListS</tt>.
<hr>
<tt>adjacency_list::directed_selector</tt>
<br><br>
The type <tt>DirectedS</tt>.
<hr>
<tt>adjacency_list::edge_list_selector</tt>
<br><br>
The type <tt>EdgeListS</tt>.
<hr>
<H2>Member Functions</H2>
<hr>
@@ -596,7 +629,21 @@ std::pair&lt;adjacency_iterator,&nbsp;adjacency_iterator&gt;
adjacent_vertices(vertex_descriptor&nbsp;u, const&nbsp;adjacency_list&amp;&nbsp;g)
</pre>
Returns an iterator-range providing access to the vertices adjacent to
vertex <tt>u</tt> in graph <tt>g</tt>.
vertex <tt>u</tt> in graph <tt>g</tt>. For example, if <tt>u -> v</tt>
is an edge in the graph, then <tt>v</tt> will be in this iterator-range.
<hr>
<pre>
std::pair&lt;inv_adjacency_iterator,&nbsp;inv_adjacency_iterator&gt;
inv_adjacent_vertices(vertex_descriptor&nbsp;u, const&nbsp;adjacency_list&amp;&nbsp;g)
</pre>
Returns an iterator-range providing access to the vertices in graph
<tt>g</tt> to which <tt>u</tt> is adjacent. (<tt>inv</tt> is for
inverse.) For example, if <tt>v -> u</tt> is an edge in the graph,
then <tt>v</tt> will be in this iterator range. This function is only
available for bidirectional and undirected <tt>adjacency_list</tt>'s.
<hr>
@@ -723,10 +770,8 @@ add_edge(vertex_descriptor&nbsp;u, vertex_descriptor&nbsp;v,
Adds edge <i>(u,v)</i> to the graph and returns the edge descriptor
for the new edge. For graphs that do not allow parallel edges, if the
edge is already in the graph then a duplicate will not be added and
the <TT>bool</TT> flag will be <TT>false</TT>. Also, if <i>u</i> and
<i>v</i> are descriptors for the same vertex (creating a self loop)
and the graph is undirected, then the edge will not be added and the
flag will be <TT>false</TT>. When the flag is <TT>false</TT>, the
the <TT>bool</TT> flag will be <TT>false</TT>. When the flag is
<TT>false</TT>, the
returned edge descriptor points to the already existing edge.
<p>
@@ -1007,9 +1052,35 @@ attached to the graph object <tt>g</tt>. The <tt>graph_property</tt>
traits class is defined in <a
href="../../../boost/graph/adjacency_list.hpp"><tt>boost/graph/adjacency_list.hpp</tt></a>.
<!-- add the shortcut property functions -->
<hr>
<!-- add the shortcut property functions -->
<h4><a name="serialization">Serialization</a></h4>
<hr>
<pre>
template&lt;class <a href="../../serialization/doc/archives.html#saving_interface">SavingArchive</a>&gt;
SavingArchive&amp; operator<<(SavingArchive&amp; ar, const adjacency_list&amp graph);
</pre>
Serializes the graph into the archive. Requires the vertex and edge properties of the
graph to be <a href="../../serialization/doc/index.html">Serializable</a>.
<br>
Include <a href="../../../boost/graph/adj_list_serialize.hpp"><tt>boost/graph/adj_list_serialize.hpp</tt></a>.
<hr>
<pre>
template&lt;class <a href="../../serialization/doc/archives.html#loading_interface">LoadingArchive</a>&gt;
LoadingArchive&amp; operator>>(LoadingArchive&amp; ar, const adjacency_list&amp graph);
</pre>
Reads the graph from the archive. Requires the vertex and edge properties of the
graph to be <a href="../../serialization/doc/index.html">Serializable</a>.
<br>
Include <a href="../../../boost/graph/adj_list_serialize.hpp"><tt>boost/graph/adj_list_serialize.hpp</tt></a>.
<hr>
<h3>See Also</h3>
+4 -8
View File
@@ -2,19 +2,15 @@
<!--
-- Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 2000
--
-- Permission to use, copy, modify, distribute and sell this software
-- and its documentation for any purpose is hereby granted without fee,
-- provided that the above copyright notice appears in all copies and
-- that both that copyright notice and this permission notice appear
-- in supporting documentation. We make no
-- representations about the suitability of this software for any
-- purpose. It is provided "as is" without express or implied warranty.
-- 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: Graph Traits</Title>
<BODY BGCOLOR="#ffffff" LINK="#0000ee" TEXT="#000000" VLINK="#551a8b"
ALINK="#ff0000">
<IMG SRC="../../../c++boost.gif"
<IMG SRC="../../../boost.png"
ALT="C++ Boost" width="277" height="86">
<BR Clear>
+60 -29
View File
@@ -2,19 +2,15 @@
<!--
-- Copyright (c) Jeremy Siek 2000
--
-- Permission to use, copy, modify, distribute and sell this software
-- and its documentation for any purpose is hereby granted without fee,
-- provided that the above copyright notice appears in all copies and
-- that both that copyright notice and this permission notice appear
-- in supporting documentation. Jeremy Siek makes no
-- representations about the suitability of this software for any
-- purpose. It is provided "as is" without express or implied warranty.
-- 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: Adjacency Matrix</Title>
<BODY BGCOLOR="#ffffff" LINK="#0000ee" TEXT="#000000" VLINK="#551a8b"
ALINK="#ff0000">
<IMG SRC="../../../c++boost.gif"
<IMG SRC="../../../boost.png"
ALT="C++ Boost" width="277" height="86">
<BR Clear>
@@ -40,7 +36,7 @@ representation of a graph.
<TABLE>
<CAPTION ALIGN="BOTTOM"><STRONG>Figure 1:</STRONG> Adjacency Matrix Representation of a Directed Graph.</CAPTION>
<TR><TD><IMG SRC="./figs/adj-matrix-graph3.gif" width="386" height="284"></TD>
<TD><IMG SRC="./figs/adj-matrix2.gif" width="135" height="136"></TD></TR>
<TD><IMG SRC="./figs/adj-matrix.gif" width="135" height="136"></TD></TR>
</TABLE>
</DIV><P></P>
@@ -59,8 +55,13 @@ graphs (where <i>E</i> is much smaller than <i>V<sup>2</sup></i>).
The <tt>adjacency_matrix</tt> class extends the traditional
data-structure by allowing objects to be attached to vertices and
edges via the the property template parameters. See Section XXX for an
explanation of how to use internal properties.
edges using the same property template parameters supported by <a
href="adjacency_list.html"><tt>adjacency_list</tt></a>. These may be
<a href="bundles.html">bundled properties</a> or standard (backward-compatible)
<a
href="using_adjacency_list.html#sec:adjacency-list-properties">interior
properties</a>. The types of all property values must be
Copy Constructible, Assignable and Default Constructible.
In the case of an undirected graph, the
<tt>adjacency_matrix</tt>. class does not use a full <i>V x V</i>
@@ -204,7 +205,10 @@ The output is:
<h3>Model Of</h3>
<a href="./VertexAndEdgeListGraph.html">VertexAndEdgeListGraph</a>, <a
<a href="./VertexAndEdgeListGraph.html">VertexAndEdgeListGraph</a>,
<a href="./IncidenceGraph.html">Incidence Graph</a>,
<a href="./BidirectionalGraph.html">Bidirectional Graph</a>,
<a
href="./AdjacencyMatrix.html">AdjacencyMatrix</a>, <a
href="./MutablePropertyGraph.html">MutablePropertyGraph</a>,
<a href="../../utility/CopyConstructible.html">CopyConstructible</a>,
@@ -250,6 +254,13 @@ The type for the edge descriptors associated with the
iterator models <a href="../../utility/MultiPassInputIterator.html">MultiPassInputIterator</a>. <br>
(Required by <a href="IncidenceGraph.html">IncidenceGraph</a>.)
<hr>
<tt>graph_traits&lt;adjacency_matrix&gt;::in_edge_iterator</tt>
<br><br>
The type for the iterators returned by <tt>in_edges()</tt>. This
iterator models <a href="../../utility/MultiPassInputIterator.html">MultiPassInputIterator</a>. <br>
(Required by <a href="BidirectionalGraph.html">BidirectionalGraph</a>.)
<hr>
<tt>graph_traits&lt;adjacency_matrix&gt;::adjacency_iterator</tt>
<br><br>
@@ -356,15 +367,15 @@ adjacency_matrix(EdgeIterator first, EdgeIterator last,
std::pair&lt;vertex_iterator, vertex_iterator&gt;
vertices(const adjacency_matrix&amp; g)
</pre>
Returns an iterator-range providing access to the vertex set of graph <tt>g</i>.<br>
Returns an iterator-range providing access to the vertex set of graph <tt>g</tt>.<br>
(Required by <a href="VertexListGraph.html">VertexListGraph</a>.)
<hr>
<pre>
std::pair&lt;edge_iterator, edge_iterator&gt;
edges(const adjacency_matrix&amp; g)
edges(const adjacency_matrix&amp; g);
</pre>
Returns an iterator-range providing access to the edge set of graph <tt>g</i>.<br>
Returns an iterator-range providing access to the edge set of graph <tt>g</tt>.<br>
(Required by <a href="EdgeListGraph.html">EdgeListGraph</a>.)
<hr>
@@ -373,7 +384,7 @@ std::pair&lt;adjacency_iterator, adjacency_iterator&gt;
adjacent_vertices(vertex_descriptor v, const adjacency_matrix&amp; g)
</pre>
Returns an iterator-range providing access to the vertices adjacent to
vertex <tt>v</i> in graph <tt>g</i>.<br>
vertex <tt>v</tt> in graph <tt>g</tt>.<br>
(Required by <a href="AdjacencyGraph.html">AdjacencyGraph</a>.)
<hr>
@@ -382,9 +393,9 @@ std::pair&lt;out_edge_iterator, out_edge_iterator&gt;
out_edges(vertex_descriptor v, const adjacency_matrix&amp; g)
</pre>
Returns an iterator-range providing access to the out-edges of
vertex <tt>v</i> in graph <tt>g</i>. If the graph is undirected,
this iterator-range provides access to all edge incident on
vertex <tt>v</i>. <br>
vertex <tt>v</tt> in graph <tt>g</tt>. If the graph is undirected,
this iterator-range provides access to all edges incident on
vertex <tt>v</tt>. <br>
(Required by <a href="IncidenceGraph.html">IncidenceGraph</a>.)
<hr>
@@ -392,7 +403,7 @@ vertex <tt>v</i>. <br>
vertex_descriptor
source(edge_descriptor e, const adjacency_matrix&amp; g)
</pre>
Returns the source vertex of edge <tt>e</i>.<br>
Returns the source vertex of edge <tt>e</tt>.<br>
(Required by <a href="IncidenceGraph.html">IncidenceGraph</a>.)
<hr>
@@ -400,7 +411,7 @@ Returns the source vertex of edge <tt>e</i>.<br>
vertex_descriptor
target(edge_descriptor e, const adjacency_matrix&amp; g)
</pre>
Returns the target vertex of edge <tt>e</i>.<br>
Returns the target vertex of edge <tt>e</tt>.<br>
(Required by <a href="IncidenceGraph.html">IncidenceGraph</a>.)
<hr>
@@ -408,15 +419,35 @@ Returns the target vertex of edge <tt>e</i>.<br>
degree_size_type
out_degree(vertex_descriptor u, const adjacency_matrix&amp; g)
</pre>
Returns the number of edges leaving vertex <tt>u</i>.<br>
Returns the number of edges leaving vertex <tt>u</tt>.<br>
(Required by <a href="IncidenceGraph.html">IncidenceGraph</a>.)
<hr>
<hr>
<pre>
std::pair&lt;in_edge_iterator, in_edge_iterator&gt;
in_edges(vertex_descriptor v, const adjacency_matrix&amp; g)
</pre>
Returns an iterator-range providing access to the in-edges of
vertex <tt>v</tt> in graph <tt>g</tt>. If the graph is undirected,
this iterator-range provides access to all edges incident on
vertex <tt>v</tt>. <br>
(Required by <a href="BidirectionalGraph.html">BidirectionalGraph</a>.)
<hr>
<pre>
degree_size_type
in_degree(vertex_descriptor u, const adjacency_matrix&amp; g)
</pre>
Returns the number of edges entering vertex <tt>u</tt>.<br>
(Required by <a href="BidirectionalGraph.html">BidirectionalGraph</a>.)
<hr>
<hr>
<pre>
vertices_size_type num_vertices(const adjacency_matrix&amp; g)
</pre>
Returns the number of vertices in the graph <tt>g</i>.<br>
Returns the number of vertices in the graph <tt>g</tt>.<br>
(Required by <a href="VertexListGraph.html">VertexListGraph</a>.)
<hr>
@@ -438,7 +469,7 @@ std::pair&lt;edge_descriptor, bool&gt;
edge(vertex_descriptor u, vertex_descriptor v,
const adjacency_matrix&amp; g)
</pre>
Returns the edge connecting vertex <tt>u</i> to vertex <tt>v</i> in graph <tt>g</i>.<br>
Returns the edge connecting vertex <tt>u</tt> to vertex <tt>v</tt> in graph <tt>g</tt>.<br>
(Required by <a href="AdjacencyMatrix.html">AdjacencyMatrix</a>.)
<hr>
@@ -447,7 +478,7 @@ std::pair&lt;edge_descriptor, bool&gt;
add_edge(vertex_descriptor u, vertex_descriptor v,
adjacency_matrix&amp; g)
</pre>
Adds edge <tt>(u,v)</i> to the graph and returns the edge descriptor for
Adds edge <tt>(u,v)</tt> to the graph and returns the edge descriptor for
the new edge. If the edge is already in the graph then a duplicate
will not be added and the <tt>bool</tt> flag will be <tt>false</tt>.
This operation does not invalidate any of the graph's iterators
@@ -461,7 +492,7 @@ add_edge(vertex_descriptor u, vertex_descriptor v,
const EdgeProperty& p,
adjacency_matrix&amp; g)
</pre>
Adds edge <tt>(u,v)</i> to the graph and attaches <tt>p</tt> as the
Adds edge <tt>(u,v)</tt> 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.
@@ -470,7 +501,7 @@ value of the edge's internal property storage. Also see the previous
void remove_edge(vertex_descriptor u, vertex_descriptor v,
adjacency_matrix&amp; g)
</pre>
Removes the edge <tt>(u,v)</i> from the graph. <br>
Removes the edge <tt>(u,v)</tt> from the graph. <br>
(Required by <a href="MutableGraph.html">MutableGraph</a>.)
<hr>
@@ -485,7 +516,7 @@ to calling <tt>remove_edge(source(e, g), target(e, g), g)</tt>.<br>
<pre>
void clear_vertex(vertex_descriptor u, adjacency_matrix&amp; g)
</pre>
Removes all edges to and from vertex <tt>u</i>. The vertex still appears
Removes all edges to and from vertex <tt>u</tt>. The vertex still appears
in the vertex set of the graph.<br>
(Required by <a href="MutableGraph.html">MutableGraph</a>.)
@@ -509,7 +540,7 @@ argument.<br>
<pre>
template &lt;typename Property, typename X&gt;
typename property_traits&lt;
typenamae property_map&lt;adjacency_matrix, Property&gt;::const_type
typename property_map&lt;adjacency_matrix, Property&gt;::const_type
&gt;::value_type
get(Property, const adjacency_matrix&amp; g, X x)
</pre>
+96
View File
@@ -0,0 +1,96 @@
<HTML>
<!--
-- Copyright (c) 2004 Kris Beevers
--
-- 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: astar_heuristic</Title>
<BODY BGCOLOR="#ffffff" LINK="#0000ee" TEXT="#000000" VLINK="#551a8b"
ALINK="#ff0000">
<IMG SRC="../../../boost.png"
ALT="C++ Boost" width="277" height="86">
<BR Clear>
<H1>
<pre>
astar_heuristic&lt;Graph, CostType&gt;
</pre>
</H1>
This class is a default implementation of the <a
href="./AStarHeuristic.html">AStarHeuristic</a> concept. It
implements a "zero" heuristic -- a heuristic function that returns a
cost of zero regardless of the vertex it is passed.
<h3>Model of</h3>
<a href="./AStarHeuristic.html">AStarHeuristic</a>
<H3>Template Parameters</H3>
<P>
<TABLE border>
<TR>
<th>Parameter</th><th>Description</th><th>Default</th>
</tr>
<TR><TD><TT>Graph</TT></TD>
<TD>
The type of the graph being searched.
</TD>
<TD></TD>
</TR>
<TR><TD><TT>CostType</TT></TD>
<TD>
A type that can be used with the <tt>compare</tt> and
<tt>combine</tt> functions passed to A*. Typically an integer or
floating point type.
</TD>
<TD></TD>
</TR>
</table>
<H3>Where Defined</H3>
<P>
<a href="../../../boost/graph/astar_search.hpp">
<TT>boost/graph/astar_search.hpp</TT></a>
<h3>Member Functions</h3>
This class implements the single member function required by <a
href="./AStarHeuristic.html">AStarHeuristic</a>:
<table border>
<tr>
<th>Function</th><th>Description</th>
</tr>
<tr><td><tt>
CostType operator()(graph_traits&lt;Graph&gt;::vertex_descriptor u);
</tt></td><td>
Called for the target of every out edge of a vertex being examined.
Returns the cost, estimated by the heuristic, from vertex <tt>u</tt>
to a goal.
</td></tr>
</table>
<br>
<HR>
<TABLE>
<TR valign=top>
<TD nowrap>Copyright &copy 2004</TD><TD>
<A HREF="http://www.cs.rpi.edu/~beevek/">Kristopher Beevers</A>,
Rensselaer Polytechnic Institute (<A
HREF="mailto:beevek@cs.rpi.edu">beevek@cs.rpi.edu</A>)
</TD></TR></TABLE>
</BODY>
</HTML>
+477
View File
@@ -0,0 +1,477 @@
<HTML>
<!--
-- Copyright (c) 2004 Kris Beevers
--
-- 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: A* Heuristic Search</Title>
<BODY BGCOLOR="#ffffff" LINK="#0000ee" TEXT="#000000" VLINK="#551a8b"
ALINK="#ff0000">
<IMG SRC="../../../boost.png"
ALT="C++ Boost" width="277" height="86">
<BR Clear>
<H1><A NAME="sec:astar"></A>
<TT>astar_search</TT>
</H1>
<P>
<PRE>
<i>// Named parameter interface</i>
template &lt;typename VertexListGraph,
typename AStarHeuristic,
typename P, typename T, typename R&gt;
void
astar_search
(VertexListGraph &amp;g,
typename graph_traits&lt;VertexListGraph&gt;::vertex_descriptor s,
<a href="AStarHeuristic.html">AStarHeuristic</a> h, const bgl_named_params&lt;P, T, R&gt;&amp; params);
<i>// Non-named parameter interface</i>
template &lt;typename VertexListGraph, typename AStarHeuristic,
typename <a href="AStarVisitor.html">AStarVisitor</a>, typename PredecessorMap,
typename CostMap, typename DistanceMap,
typename WeightMap, typename VertexIndexMap,
typename ColorMap,
typename <a href="http://www.sgi.com/tech/stl/BinaryPredicate.html">CompareFunction</a>, typename <a href="http://www.sgi.com/tech/stl/BinaryFunction.html">CombineFunction</a>,
typename CostInf, typename CostZero&gt;
inline void
astar_search
(VertexListGraph &amp;g,
typename graph_traits&lt;VertexListGraph&gt;::vertex_descriptor s,
AStarHeuristic h, AStarVisitor vis,
PredecessorMap predecessor, CostMap cost,
DistanceMap distance, WeightMap weight,
VertexIndexMap index_map, ColorMap color,
CompareFunction compare, CombineFunction combine,
CostInf inf, CostZero zero);
</PRE>
<P>
This algorithm implements a heuristic search on a weighted, directed
or undirected graph for the case where all edge weights are
non-negative.
</P>
<P>
The A* algorithm is a <i>heuristic graph search algorithm</i>: an A*
search is "guided" by a <i>heuristic function</i>. A heuristic
function <i>h(v)</i> is one which estimates the cost from a non-goal
state (<i>v</i>) in the graph to some goal state, <i>g</i>.
Intuitively, A* follows paths (through the graph) to the goal that are
estimated by the heuristic function to be the best paths. Unlike
best-first search, A* takes into account the known cost from the start
of the search to <i>v</i>; the paths A* takes are guided by a function
<i>f(v) = g(v) + h(v)</i>, where <i>h(v)</i> is the heuristic
function, and <i>g(v)</i> (sometimes denoted <i>c(s, v)</i>) is the
known cost from the start to <i>v</i>. Clearly, the efficiency of A*
is highly dependent on the heuristic function with which it is used.
</P>
<P>
The A* algorithm is very similar to Dijkstra's Shortest Paths
algorithm. This implementation finds all the shortest paths from the
start vertex to every other vertex by creating a search tree,
examining vertices according to their remaining cost to some goal, as
estimated by a heuristic function. Most commonly, A* is used to find
some specific goal vertex or vertices in a graph, after which the
search is terminated.
</P>
<P>
A* is particularly useful for searching <i>implicit</i> graphs.
Implicit graphs are graphs that are not completely known at the
beginning of the search. Upon visiting a vertex, its neighbors are
"generated" and added to the search. Implicit graphs are particularly
useful for searching large state spaces -- in gameplaying scenarios
(e.g. chess), for example -- in which it may not be possible to store
the entire graph. Implicit searches can be performed with this
implementation of A* by creating special visitors that generate
neighbors of newly-expanded vertices.
</P>
<P>
This implementation of A* is based on an OPEN/CLOSED list formulation
of the algorithm. Vertices on the OPEN list have been ``discovered''
by the algorithm, but not ``expanded'' (we have not discovered their
adjacent vertices). Vertices on the CLOSED list have been completely
examined by our search (we have expanded them and added their children
to the OPEN list). Vertices that are on neither list have not been
encountered in any context so far in our search. A major advantage of
this formulation of the A* algorithm over other approaches is that it
avoids ``cycles'' in the state space; the search will not become
trapped by loops in the graph. The OPEN/CLOSED lists are implemented
using BGL's vertex coloring mechanisms. Vertices in OPEN are colored
gray, vertices in CLOSED are colored black, and undiscovered vertices
are colored white.
</P>
<P>
The criteria for expanding a vertex on the OPEN list is that it has
the lowest <i>f(v) = g(v) + h(v)</i> value of all vertices on OPEN.
Cost information about vertices is stored in a property map.
</P>
<P>
The following is the pseudocode for the A* heuristic search algorithm.
In the pseudocode, <i>h</i> is the heuristic function, <i>w</i> is the
edge weight, <i>d</i> is the distance of a vertex from <i>s</i>, and
<i>Q</i> is a priority queue, sorted by <i>f</i>, the estimated cost
to the goal of the path through a vertex. <i>p</i> is a predecessor
map. The visitor event points for the algorithm are indicated by the
labels on the right.
</P>
<table>
<tr>
<td valign="top">
<pre>
A*(<i>G</i>, <i>s</i>, <i>h</i>)
<b>for</b> each vertex <i>u in V</i>
<i>d[u] := f[u] := infinity</i>
<i>color[u] :=</i> WHITE
<i>p[u] := u</i>
<b>end for</b>
<i>color[s] :=</i> GRAY
<i>d[s] := 0</i>
<i>f[s] := h(s)</i>
INSERT(<i>Q, s</i>)
<b>while</b> (<i>Q != &Oslash;</i>)
<i>u :=</i> EXTRACT-MIN(<i>Q</i>)
<b>for</b> each vertex <i>v in Adj[u]</i>
<b>if</b> (<i>w(u,v) + d[u] &lt; d[v]</i>)
<i>d[v] := w(u,v) + d[u]</i>
<i>f[v] := d[v] + h(v)</i>
<i>p[v] := u</i>
<b>if</b> (<i>color[v] =</i> WHITE)
<i>color[v] :=</i> GRAY
INSERT(<i>Q, v</i>)
<b>else if</b> (<i>color[v] =</i> BLACK)
<i>color[v] :=</i> GRAY
INSERT(<i>Q, v</i>)
<b>end if</b>
<b>else</b>
<i>...</i>
<b>end for</b>
<i>color[u] :=</i> BLACK
<b>end while</b>
</pre>
</td>
<td valign="top">
<pre>
initialize vertex <i>u</i>
discover vertex <i>s</i>
examine vertex <i>u</i>
examine edge <i>(u,v)</i>
edge <i>(u,v)</i> relaxed
discover vertex <i>v</i>
reopen vertex <i>v</i>
edge <i>(u,v)</i> not relaxed
finish vertex <i>u</i>
</pre>
</td>
</tr>
</table>
<h3>Where Defined</h3>
<a href="../../../boost/graph/astar_search.hpp"><tt>boost/graph/astar_search.hpp</tt></a>
<h3>Parameters</h3>
IN: <tt>VertexListGraph&amp; g</tt>
<blockquote>
The graph object on which the algorithm will be applied. The type
<tt>VertexListGraph</tt> must be a model of the <a
href="VertexListGraph.html">
Vertex List Graph</a> concept.
</blockquote>
IN: <tt>vertex_descriptor s</tt>
<blockquote>
The start vertex for the search. All distances will be calculated
from this vertex, and the shortest paths tree (recorded in the
predecessor map) will be rooted at this vertex.
</blockquote>
IN: <tt>AStarHeuristic h</tt>
<blockquote>
The heuristic function that guides the search. The type
<tt>AStarHeuristic</tt> must be a model of the <a href="AStarHeuristic.html">AStarHeuristic</a>
concept.
</blockquote>
<h3>Named Parameters</h3>
IN: <tt>weight_map(WeightMap w_map)</tt>
<blockquote>
The weight or ``length'' of each edge in the graph. The weights
must all be non-negative; the algorithm will throw a <a
href="./exception.html#negative_edge"><tt>negative_edge</tt></a>
exception if one of the edges is negative. The type
<tt>WeightMap</tt> must be a model of <a
href="../../property_map/ReadablePropertyMap.html"><tt>Readable
Property Map</tt></a>. The edge descriptor type of the graph needs
to be usable as the key type for the weight map. The value type
for this map must be the same as the value type of the distance
map.<br>
<b>Default:</b> <tt>get(edge\_weight, g)</tt>
</blockquote>
IN: <tt>vertex_index_map(VertexIndexMap i_map)</tt>
<blockquote>
This maps each vertex to an integer in the range <tt>[0,
num_vertices(g))</tt>. This is necessary for efficient updates of
the heap data structure when an edge is relaxed. The type
<tt>VertexIndexMap</tt> must be a model of <a
href="../../property_map/ReadablePropertyMap.html"><tt>Readable
Property Map</tt></a>. The value type of the map must be an integer
type. The vertex descriptor type of the graph needs to be usable as
the key type of the map.<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
not have an internal <tt>vertex_index</tt> property.
</blockquote>
OUT: <tt>predecessor_map(PredecessorMap p_map)</tt>
<blockquote>
The predecessor map records the edges in the minimum spanning tree.
Upon completion of the algorithm, the edges <tt>(p[u],u)</tt> for
all <tt>u</tt> in <tt>V</tt> are in the minimum spanning tree. If
<tt>p[u] = u</tt> then <tt>u</tt> is either the start vertex or a
vertex that is not reachable from the start. The
<tt>PredecessorMap</tt> type must be a <a
href="../../property_map/ReadWritePropertyMap.html"><tt>Read/Write
Property Map</tt></a> with key and vertex types the same as the
vertex descriptor type of the graph.<br>
<b>Default:</b> <tt>dummy_property_map</tt>
</blockquote>
UTIL/OUT: <tt>distance_map(DistanceMap d_map)</tt>
<blockquote>
The shortest path weight from the start vertex <tt>s</tt> to each
vertex in the graph <tt>g</tt> is recorded in this property map.
The shortest path weight is the sum of the edge weights along the
shortest path. The type <tt>DistanceMap</tt> must be a model of <a
href="../../property_map/ReadWritePropertyMap.html"><tt>Read/Write
Property Map</tt></a>. The vertex descriptor type of the graph
needs to be usable as the key type of the distance map. The value
type of the distance map is the element type of a <a
href="./Monoid.html"><tt>Monoid</tt></a> formed with the
<tt>combine</tt> function object and the zero object for the
identity element. Also the distance value type must have a <a
href="http://www.sgi.com/tech/stl/StrictWeakOrdering.html"><tt>StrictWeakOrdering</tt></a>
provided by the <tt>compare</tt> function object.<br>
<b>Default:</b> <tt>iterator_property_map</tt> created from a
<tt>std::vector</tt> with the same value type as the
<tt>WeightMap</tt>, and of size <tt>num_vertices(g)</tt>, and using
the <tt>i_map</tt> for the index map.
</blockquote>
UTIL/OUT: <tt>rank_map(CostMap c_map)</tt>
<blockquote>
The <i>f</i>-value for each vertex. The <i>f</i>-value is defined
as the sum of the cost to get to a vertex from the start vertex, and
the estimated cost (as returned by the heuristic function
<tt>h</tt>) from the vertex to a goal. The type <tt>CostMap</tt>
must be a model of <a
href="../../property_map/ReadWritePropertyMap.html"><tt>Read/Write
Property Map</tt></a>. The vertex descriptor type of the graph
needs to be usable as the key type of the distance map. The value
type of the distance map is the element type of a <a
href="./Monoid.html"><tt>Monoid</tt></a> formed with the
<tt>combine</tt> function object and the zero object for the
identity element. Also the distance value type must have a <a
href="http://www.sgi.com/tech/stl/StrictWeakOrdering.html"><tt>StrictWeakOrdering</tt></a>
provided by the <tt>compare</tt> function object. The value type
for this map must be the same as the value type for the distance
map.<br>
<b>Default:</b> <tt>iterator_property_map</tt> created from a
<tt>std::vector</tt> with the same value type as the
<tt>WeightMap</tt>, and of size <tt>num_vertices(g)</tt>, and using
the <tt>i_map</tt> for the index map.
</blockquote>
UTIL/OUT: <tt>color_map(ColorMap c_map)</tt>
<blockquote>
This is used during the execution of the algorithm to mark the
vertices, indicating whether they are on the OPEN or CLOSED lists.
The vertices start out white and become gray when they are inserted
into the OPEN list. They then turn black when they are examined and
placed on the CLOSED list. At the end of the algorithm, vertices
reachable from the source vertex will have been colored black. All
other vertices will still be white. The type <tt>ColorMap</tt> must
be a model of <a
href="../../property_map/ReadWritePropertyMap.html"><tt>Read/Write
Property Map</tt></a>. A vertex descriptor must be usable as the
key type of the map, and the value type of the map must be a model
of <a href="./ColorValue.html"><tt>Color Value</tt></a>.<br>
<b>Default:</b> <tt>iterator_property_map</tt> created from a
<tt>std::vector</tt> of value type <tt>default_color_type</tt>, with
size <tt>num_vertices(g)</tt>, and using the <tt>i_map</tt> for the
index map.
</blockquote>
IN: <tt>distance_compare(CompareFunction cmp)</tt>
<blockquote>
This function is use to compare distances to determine which vertex
is closer to the start vertex, and to compare <i>f</i>-values to
determine which vertex on the OPEN list to examine next. The
<tt>CompareFunction</tt> type must be a model of <a
href="http://www.sgi.com/tech/stl/BinaryPredicate.html"><tt>Binary
Predicate</tt></a> and have argument types that match the value type
of the <tt>DistanceMap</tt> property map.<br>
<b>Default:</b> <tt>std::less&lt;D&gt;</tt> with <tt>D = typename
property_traits&lt;DistanceMap&gt;::value_type</tt>.
</blockquote>
IN: <tt>distance_combine(CombineFunction cmb)</tt>
<blockquote>
This function is used to combine distances to compute the distance
of a path, and to combine distance and heuristic values to compute
the <i>f</i>-value of a vertex. The <tt>CombineFunction</tt> type
must be a model of <a
href="http://www.sgi.com/tech/stl/BinaryFunction.html"><tt>Binary
Function</tt></a>. Both argument types of the binary function must
match the value type of the <tt>DistanceMap</tt> property map (which
is the same as that of the <tt>WeightMap</tt> and <tt>CostMap</tt>
property maps). The result type must be the same type as the
distance value type.<br>
<b>Default:</b> <tt>std::plus&lt;D&gt;</tt> with <tt>D = typename
property_traits&lt;DistanceMap&gt;::value_type</tt>.
</blockquote>
IN: <tt>distance_inf(D inf)</tt>
<blockquote>
The <tt>inf</tt> object must be the greatest value of any <tt>D</tt>
object. That is, <tt>compare(d, inf) == true</tt> for any <tt>d !=
inf</tt>. The type <tt>D</tt> is the value type of the
<tt>DistanceMap</tt>.<br>
<b>Default:</b> <tt>std::numeric_limits&lt;D&gt;::max()</tt>
</blockquote>
IN: <tt>distance_zero(D zero)</tt>
<blockquote>
The <tt>zero</tt> value must be the identity element for the <a
href="./Monoid.html"><tt>Monoid</tt></a> formed by the distance
values and the <tt>combine</tt> function object. The type
<tt>D</tt> is the value type of the <tt>DistanceMap</tt>.<br>
<b>Default</b>: <tt>D()</tt> with <tt>D = typename
property_traits&lt;DistanceMap&gt;::value_type</tt>.
</blockquote>
OUT: <tt>visitor(AStarVisitor v)</tt>
<blockquote>
Use this to specify actions that you would like to happen during
certain event points within the algorithm. The type
<tt>AStarVisitor</tt> must be a model of the <a
href="AStarVisitor.html"><tt>AStarVisitor</tt></a> concept. The
visitor object is passed by value <a href="#1">[1]</a>.<br>
<b>Default:</b> <tt>astar_visitor&lt;null_visitor&gt;</tt>
</blockquote>
<H3>Complexity</H3>
<P>
The time complexity is <i>O((E + V) log V)</i>.
<h3>Visitor Event Points</h3>
<ul>
<li><b><tt>vis.initialize_vertex(u, g)</tt></b>
is invoked on each vertex in the graph before the start of the
algorithm.
<li><b><tt>vis.discover_vertex(v, g)</tt></b>
is invoked when a vertex is first discovered and is added to the
OPEN list.
<li><b><tt>vis.examine_vertex(u, g)</tt></b>
is invoked when a vertex is popped from
the queue (i.e., it has the lowest cost on the OPEN list).
<li><b><tt>vis.examine_edge(e, g)</tt></b>
is invoked on each out-edge of a vertex immediately after it is
examined.
<li><b><tt>vis.edge_relaxed(e, g)</tt></b>
is invoked on edge <i>(u,v)</i> if <i>d[u] + w(u,v) < d[v]</i>.
<li><b><tt>vis.edge_not_relaxed(e, g)</tt></b>
is invoked if the edge is not relaxed (see above).
<li><b><tt>vis.black_target(u, g)</tt></b>
is invoked when a vertex that is on the CLOSED list is
"rediscovered" via a more efficient path, and is re-added to the
OPEN list.
<li><b><tt>vis.finish_vertex(u, g)</tt></b>
is invoked on a vertex when it is added to the CLOSED list, which
happens after all of its out edges have been examined.
</ul>
<H3>Example</H3>
<P>
See <a href="../example/astar-cities.cpp">
<TT>example/astar-cities.cpp</TT></a> for an example of
using A* search.
<H3>Notes</H3>
<a name="1">[1]</a> Since the visitor parameter is passed by value, if
your visitor contains state then any changes to the state during the
algorithm will be made to a copy of the visitor object, not the
visitor object passed in. Therefore you may want the visitor to hold
this state by pointer or reference.
<br>
<HR>
<TABLE>
<TR valign=top>
<TD nowrap>Copyright &copy 2004</TD><TD>
<A HREF="http://www.cs.rpi.edu/~beevek/">Kristopher Beevers</A>,
Rensselaer Polytechnic Institute (<A
HREF="mailto:beevek@cs.rpi.edu">beevek@cs.rpi.edu</A>)
</TD></TR></TABLE>
</BODY>
</HTML>
+108
View File
@@ -0,0 +1,108 @@
<HTML>
<!--
-- Copyright (c) 2004 Kris Beevers
--
-- 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: astar_visitor</Title>
<BODY BGCOLOR="#ffffff" LINK="#0000ee" TEXT="#000000" VLINK="#551a8b"
ALINK="#ff0000">
<IMG SRC="../../../boost.png"
ALT="C++ Boost" width="277" height="86">
<BR Clear>
<H1>
<pre>
astar_visitor&lt;EventVisitorList&gt;
</pre>
</H1>
This class is an adapter that converts a list of <a
href="./EventVisitor.html">EventVisitor</a>'s (constructed using
<tt>std::pair</tt>) into a <a
href="./AStarVisitor.html">AStarVisitor</a>.
<h3>Example</h3>
See the example for <a href="./EventVisitor.html">EventVisitor</a>.
<h3>Model of</h3>
<a href="./AStarVisitor.html">AStarVisitor</a>
<H3>Template Parameters</H3>
<P>
<TABLE border>
<TR>
<th>Parameter</th><th>Description</th><th>Default</th>
</tr>
<TR><TD><TT>EventVisitorList</TT></TD>
<TD>
A list of <a href="./EventVisitor.html">EventVisitor</a>'s created
with <tt>std::pair</tt>.
</TD>
<TD><TT><a href="./null_visitor.html"><tt>null_visitor</tt></a></TT></TD>
</TR>
</table>
<H3>Where Defined</H3>
<P>
<a href="../../../boost/graph/astar_search.hpp">
<TT>boost/graph/astar_search.hpp</TT></a>
<h3>Member Functions</h3>
This class implements all of the member functions required by <a
href="./AStarVisitor.html">AStarVisitor</a>. In each function the
appropriate event is dispatched to the <a
href="./EventVisitor.html">EventVisitor</a>'s in the
EventVisitorList.
<h3>Non-Member Functions</h3>
<table border>
<tr>
<th>Function</th><th>Description</th>
</tr>
<tr><td><tt>
template &lt;class EventVisitorList&gt;<br>
astar_visitor&lt;EventVisitorList&gt;<br>
make_astar_visitor(EventVisitorList ev_list);
</tt></td><td>
Returns the event visitor list adapted to be an A* visitor.
</td></tr>
</table>
<h3>See Also</h3>
<a href="./visitor_concepts.html">Visitor concepts</a>
<p>
The following are event visitors: <a
href="./predecessor_recorder.html"><tt>predecessor_recorder</tt></a>,
<a href="./distance_recorder.html"><tt>distance_recorder</tt></a>,
<a href="./time_stamper.html"><tt>time_stamper</tt></a>,
and <a href="./property_writer.html"><tt>property_writer</tt></a>.
<br>
<HR>
<TABLE>
<TR valign=top>
<TD nowrap>Copyright &copy 2004</TD><TD>
<A HREF="http://www.cs.rpi.edu/~beevek/">Kristopher Beevers</A>,
Rensselaer Polytechnic Institute (<A
HREF="mailto:beevek@cs.rpi.edu">beevek@cs.rpi.edu</A>)
</TD></TR></TABLE>
</BODY>
</HTML>
+4 -8
View File
@@ -2,19 +2,15 @@
<!--
-- Copyright (c) Jeremy Siek 2000
--
-- Permission to use, copy, modify, distribute and sell this software
-- and its documentation for any purpose is hereby granted without fee,
-- provided that the above copyright notice appears in all copies and
-- that both that copyright notice and this permission notice appear
-- in supporting documentation. Silicon Graphics makes no
-- representations about the suitability of this software for any
-- purpose. It is provided "as is" without express or implied warranty.
-- 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: Bandwidth</Title>
<BODY BGCOLOR="#ffffff" LINK="#0000ee" TEXT="#000000" VLINK="#551a8b"
ALINK="#ff0000">
<IMG SRC="../../../c++boost.gif"
<IMG SRC="../../../boost.png"
ALT="C++ Boost" width="277" height="86">
<BR Clear>
+151
View File
@@ -0,0 +1,151 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<!--
-- Copyright (c) 2004 Trustees of Indiana University
--
-- 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)
-->
<html>
<head>
<meta name="generator" content=
"HTML Tidy for Mac OS X (vers 12 April 2005), see www.w3.org">
<meta http-equiv="Content-Type" content=
"text/html; charset=us-ascii">
<title>Function betweenness_centrality_clustering</title>
</head>
<body>
<div class="titlepage"></div>
<div class="refnamediv">
<IMG SRC="../../../boost.png"
ALT="C++ Boost" width="277" height="86">
<h1><img src="figs/python.gif" alt="(Python)"/><span class="refentrytitle">Function
betweenness_centrality_clustering</span></h1>
<p>boost::betweenness_centrality_clustering &mdash; Graph
clustering based on edge betweenness centrality.</p>
</div>
<h2 xmlns:rev=
"http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class=
"refsynopsisdiv-title">Synopsis</h2>
<div xmlns:rev=
"http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class=
"refsynopsisdiv">
<pre class="synopsis">
<span class="bold"><b>template</b></span>&lt;<span class=
"bold"><b>typename</b></span> MutableGraph, <span class=
"bold"><b>typename</b></span> Done, <span class=
"bold"><b>typename</b></span> EdgeCentralityMap,
<span class=
"bold"><b>typename</b></span> VertexIndexMap&gt;
<span class="type"><span class=
"bold"><b>void</b></span></span> betweenness_centrality_clustering(MutableGraph &amp; g, Done done,
EdgeCentralityMap edge_centrality,
VertexIndexMap vertex_index);
<span class="bold"><b>template</b></span>&lt;<span class=
"bold"><b>typename</b></span> MutableGraph, <span class=
"bold"><b>typename</b></span> Done, <span class=
"bold"><b>typename</b></span> EdgeCentralityMap&gt;
<span class="type"><span class=
"bold"><b>void</b></span></span> betweenness_centrality_clustering(MutableGraph &amp; g, Done done,
EdgeCentralityMap edge_centrality);
<span class="bold"><b>template</b></span>&lt;<span class=
"bold"><b>typename</b></span> MutableGraph, <span class=
"bold"><b>typename</b></span> Done&gt;
<span class="type"><span class=
"bold"><b>void</b></span></span> betweenness_centrality_clustering(MutableGraph &amp; g, Done done);
</pre></div>
<div class="refsect1" lang="en"><a name="id822306" id=
"id822306"></a>
<h2>Description</h2>
<p>This algorithm implements graph clustering based on edge
betweenness centrality. It is an iterative algorithm, where in each
step it compute the edge betweenness centrality (via <a href=
"betweenness_centrality.html">brandes_betweenness_centrality</a>) and
removes the edge with the maximum betweenness centrality. The
<tt class="computeroutput">done</tt> function object determines
when the algorithm terminates (the edge found when the algorithm
terminates will not be removed).</p>
<h2>Parameters</h2>
IN: <tt>const Graph&amp; g</tt>
<blockquote>
The graph object on which the algorithm will be applied. The type
<tt>Graph</tt> must be a model of <a
href="VertexListGraph.html">Vertex List Graph</a> and <a
href="IncidenceGraph.html">Incidence Graph</a>. When an edge
centrality map is supplied, it must also model <a
href="EdgeListGraph.html">Edge List Graph</a> and <a
href="MutableGraph.html">MutableGraph</a>.<br>
<b>Python</b>: The parameter is named <tt>graph</tt>.
</blockquote>
IN: <tt>Done done</tt>
<blockquote>
The function object that indicates termination of the algorithm.
It must be a ternary function object thats accepts the maximum
centrality, the descriptor of the edge that will be removed, and
the graph <tt class="computeroutput">g</tt>.<br>
<b>Python</b>: Any callable Python object will suffice.
</blockquote>
OUT/UTIL: <tt>EdgeCentralityMap edge_centrality_map</tt>
<blockquote>
This property map is used to accumulate the betweenness centrality
of each edge, and is a secondary form of output for the
algorithm. The type <tt>EdgeCentralityMap</tt> must be a model of <a
href="../../property_map/ReadWritePropertyMap.html">Read/Write
Property Map</a>, with the graph's edge descriptor type as its key
type. The value type of this property map should be the same as the
value type of the <tt>CentralityMap</tt> property map.<br>
<b>Default:</b> a <tt>dummy_property_map</tt>, which requires no
work to compute and returns no answer.<br>
<b>Python</b>: The color map must be a <tt>edge_double_map</tt> for
the graph.<br>
<b>Python default</b>: <tt>graph.get_edge_double_map("centrality")</tt>
</blockquote>
IN: <tt>VertexIndexMap vertex_index</tt>
<blockquote>
This maps each vertex to an integer in the range <tt>[0,
num_vertices(g))</tt>. This is necessary for efficient updates of the
heap data structure when an edge is relaxed. The type
<tt>VertexIndexMap</tt> must be a model of
<a href="../../property_map/ReadablePropertyMap.html">Readable Property Map</a>. The value type of the map must be an
integer type. The vertex descriptor type of the graph needs to be
usable as the key type of the map.<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
not have an internal <tt>vertex_index</tt> property.<br>
<b>Python</b>: Unsupported parameter.
</blockquote>
<table xmlns:rev=
"http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width=
"100%">
<tr>
<td align="left"></td>
<td align="right"></td>
</tr>
</table>
<h3>Where Defined</h3>
&lt;<a href=
"../../../boost/graph/bc_clustering.hpp">boost/graph/bc_clustering.hpp</a>&gt;
<hr>
<table>
<tr valign="top">
<td nowrap>Copyright &copy; 2004</td>
<td><a href="../../../people/doug_gregor.html">Douglas Gregor</a>,
Indiana University (dgregor@cs.indiana.edu)<br>
<a href="http://www.osl.iu.edu/~lums">Andrew Lumsdaine</a>, Indiana
University (<a href=
"mailto:lums@osl.iu.edu">lums@osl.iu.edu</a>)</td>
</tr>
</table>
</body>
</html>
+58 -21
View File
@@ -2,25 +2,21 @@
<!--
-- Copyright (c) Jeremy Siek 2000
--
-- Permission to use, copy, modify, distribute and sell this software
-- and its documentation for any purpose is hereby granted without fee,
-- provided that the above copyright notice appears in all copies and
-- that both that copyright notice and this permission notice appear
-- in supporting documentation. Silicon Graphics makes no
-- representations about the suitability of this software for any
-- purpose. It is provided "as is" without express or implied warranty.
-- 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>Bellman Ford Shortest Paths</Title>
<BODY BGCOLOR="#ffffff" LINK="#0000ee" TEXT="#000000" VLINK="#551a8b"
ALINK="#ff0000">
<IMG SRC="../../../c++boost.gif"
<IMG SRC="../../../boost.png"
ALT="C++ Boost" width="277" height="86">
<BR Clear>
<H1><A NAME="sec:bellman-ford"></A>
<H1><A NAME="sec:bellman-ford"></A><img src="figs/python.gif" alt="(Python)"/>
<TT>bellman_ford_shortest_paths</TT>
</H1>
@@ -28,8 +24,12 @@
<PRE>
<i>// named paramter version</i>
template &lt;class <a href="./EdgeListGraph.html">EdgeListGraph</a>, class Size, class P, class T, class R&gt;
bool bellman_ford_shortest_paths(EdgeListGraph&amp; g, Size N,
const bgl_named_params&lt;P, T, R&gt;&amp; params = <i>all defaults</i>)
bool bellman_ford_shortest_paths(const EdgeListGraph&amp; g, Size N,
const bgl_named_params&lt;P, T, R&gt;&amp; params = <i>all defaults</i>);
template &lt;class <a href="./VertexAndEdgeListGraph.html">VertexAndEdgeListGraph</a>, class P, class T, class R&gt;
bool bellman_ford_shortest_paths(const VertexAndEdgeListGraph&amp; g,
const bgl_named_params&lt;P, T, R&gt;&amp; params = <i>all defaults</i>);
<i>// non-named parameter version</i>
template &lt;class <a href="./EdgeListGraph.html">EdgeListGraph</a>, class Size, class WeightMap,
@@ -61,7 +61,8 @@ search provides an even more efficient alternative.
<p>
Before calling the <tt>bellman_ford_shortest_paths()</tt> function,
the user must assign the source vertex a distance of zero and all
other vertices a distance of infinity. The Bellman-Ford algorithm
other vertices a distance of infinity <i>unless</i> you are providing
a starting vertex. The Bellman-Ford algorithm
proceeds by looping through all of the edges in the graph, applying
the relaxation operation to each edge. In the following pseudo-code,
<i>v</i> is a vertex adjacent to <i>u</i>, <i>w</i> maps edges to
@@ -113,6 +114,7 @@ otherwise.
<td valign="top">
<pre>
BELLMAN-FORD(<i>G</i>)
<i>// Optional initialization</i>
<b>for</b> each vertex <i>u in V</i>
<i>d[u] := infinity</i>
<i>p[u] := u</i>
@@ -134,7 +136,8 @@ BELLMAN-FORD(<i>G</i>)
<td valign="top">
<pre>
initialize vertex <i>u</i>
@@ -175,13 +178,20 @@ algorithm's event points.
IN: <tt>EdgeListGraph&amp; g</tt>
<blockquote>
A directed or undirected graph whose type must be a model of
<a href="./EdgeListGraph.html">Edge List Graph</a>.
<a href="./EdgeListGraph.html">Edge List Graph</a>. If a root vertex is
provided, then the graph must also model
<a href="./VertexListGraph.html">Vertex List Graph</a>.<br>
<b>Python</b>: The parameter is named <tt>graph</tt>.
</blockquote>
IN: <tt>Size N</tt>
<blockquote>
The number of vertices in the graph. The type <tt>Size</tt> must
be an integer type.
be an integer type.<br>
<b>Default:</b> <tt>num_vertices(g)</tt>.<br>
<b>Python</b>: Unsupported parameter.
</blockquote>
@@ -195,7 +205,10 @@ IN: <tt>weight_map(WeightMap w)</tt>
Map</a>. The key type for this property map must be the edge
descriptor of the graph. The value type for the weight map must be
<i>Addable</i> with the distance map's value type. <br>
<b>Default:</b> <tt>get(edge_weight, g)</tt>
<b>Default:</b> <tt>get(edge_weight, g)</tt><br>
<b>Python</b>: Must be an <tt>edge_double_map</tt> for the graph.<br>
<b>Python default</b>: <tt>graph.get_edge_double_map("weight")</tt>
</blockquote>
OUT: <tt>predecessor_map(PredecessorMap p_map)</tt>
@@ -209,7 +222,9 @@ OUT: <tt>predecessor_map(PredecessorMap p_map)</tt>
href="../../property_map/ReadWritePropertyMap.html">Read/Write
Property Map</a> which key and vertex types the same as the vertex
descriptor type of the graph.<br>
<b>Default:</b> <tt>dummy_property_map</tt>
<b>Default:</b> <tt>dummy_property_map</tt><br>
<b>Python</b>: Must be a <tt>vertex_vertex_map</tt> for the graph.<br>
</blockquote>
IN/OUT: <tt>distance_map(DistanceMap d)</tt>
@@ -223,7 +238,19 @@ IN/OUT: <tt>distance_map(DistanceMap d)</tt>
distance map must be <a
href="http://www.sgi.com/tech/stl/LessThanComparable.html"> Less
Than Comparable</a>.<br> <b>Default:</b> <tt>get(vertex_distance,
g)</tt>
g)</tt><br>
<b>Python</b>: Must be a <tt>vertex_double_map</tt> for the graph.<br>
</blockquote>
IN: <tt>root_vertex(Vertex s)</tt>
<blockquote>
The starting (or "root") vertex from which shortest paths will be
computed. When provided, the distance map need not be initialized
(the algorithm will perform the initialization itself). However, the
graph must model <a href="./VertexListGraph.html">Vertex List
Graph</a> when this parameter is provided.<br>
<b>Default:</b> None; if omitted, the user must initialize the
distance map.
</blockquote>
IN: <tt>visitor(BellmanFordVisitor v)</tt>
@@ -233,7 +260,13 @@ IN: <tt>visitor(BellmanFordVisitor v)</tt>
The visitor object is passed by value <a
href="#1">[1]</a>.
<br>
<b>Default:</b> <tt>bellman_visitor&lt;null_visitor&gt;</tt>
<b>Default:</b> <tt>bellman_visitor&lt;null_visitor&gt;</tt><br>
<b>Python</b>: The parameter should be an object that derives from
the <a
href="BellmanFordVisitor.html#python"><tt>BellmanFordVisitor</tt></a> type
of the graph.
</blockquote>
IN: <tt>distance_combine(BinaryFunction combine)</tt>
@@ -244,7 +277,9 @@ IN: <tt>distance_combine(BinaryFunction combine)</tt>
type. The result type must be the same as the distance map's value
type.<br>
<b>Default:</b><tt>std::plus&lt;D&gt;</tt>
with <tt>D=typename&nbsp;property_traits&lt;DistanceMap&gt;::value_type</tt>.
with <tt>D=typename&nbsp;property_traits&lt;DistanceMap&gt;::value_type</tt>.<br>
<b>Python</b>: Unsupported parameter.
</blockquote>
IN: <tt>distance_compare(BinaryPredicate compare)</tt>
@@ -253,7 +288,9 @@ IN: <tt>distance_compare(BinaryPredicate compare)</tt>
that compares distances in the relaxation step. The argument types
must match the distance map's value type.<br>
<b>Default:</b> <tt>std::less&lt;D&gt;</tt>
with <tt>D=typename&nbsp;property_traits&lt;DistanceMap&gt;::value_type</tt>.
with <tt>D=typename&nbsp;property_traits&lt;DistanceMap&gt;::value_type</tt>.<br>
<b>Python</b>: Unsupported parameter.
</blockquote>
<P>
+4 -8
View File
@@ -2,19 +2,15 @@
<!--
-- Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 2000
--
-- Permission to use, copy, modify, distribute and sell this software
-- and its documentation for any purpose is hereby granted without fee,
-- provided that the above copyright notice appears in all copies and
-- that both that copyright notice and this permission notice appear
-- in supporting documentation. We make no
-- representations about the suitability of this software for any
-- purpose. It is provided "as is" without express or implied warranty.
-- 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: bellman_visitor</Title>
<BODY BGCOLOR="#ffffff" LINK="#0000ee" TEXT="#000000" VLINK="#551a8b"
ALINK="#ff0000">
<IMG SRC="../../../c++boost.gif"
<IMG SRC="../../../boost.png"
ALT="C++ Boost" width="277" height="86">
<BR Clear>
+307
View File
@@ -0,0 +1,307 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<!--
-- Copyright (c) 2004 Trustees of Indiana University
--
-- 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: Brandes' Betweenness Centrality</title>
</head>
<body>
<IMG SRC="../../../boost.png"
ALT="C++ Boost" width="277" height="86">
<h1><img src="figs/python.gif" alt="(Python)"/><tt>brandes_betweenness_centrality</tt></h1>
<p>
<pre>
<em>// named parameter versions</em>
template&lt;typename Graph, typename Param, typename Tag, typename Rest&gt;
void
brandes_betweenness_centrality(const Graph&amp; g,
const bgl_named_params&lt;Param,Tag,Rest&gt;&amp; params);
template&lt;typename Graph, typename CentralityMap&gt;
void
brandes_betweenness_centrality(const Graph&amp; g, CentralityMap centrality_map);
template&lt;typename Graph, typename CentralityMap, typename EdgeCentralityMap&gt;
void
brandes_betweenness_centrality(const Graph&amp; g, CentralityMap centrality_map,
EdgeCentralityMap edge_centrality);
<em>// non-named parameter versions</em>
template&lt;typename Graph, typename CentralityMap, typename EdgeCentralityMap,
typename IncomingMap, typename DistanceMap, typename DependencyMap,
typename PathCountMap, typename VertexIndexMap&gt;
void
brandes_betweenness_centrality(const Graph&amp; g, CentralityMap centrality_map,
EdgeCentralityMap edge_centrality,
IncomingMap incoming,
DistanceMap distance, DependencyMap dependency,
PathCountMap path_count,
VertexIndexMap vertex_index);
template&lt;typename Graph, typename CentralityMap, typename EdgeCentralityMap,
typename IncomingMap, typename DistanceMap, typename DependencyMap,
typename PathCountMap, typename VertexIndexMap, typename WeightMap&gt;
void
brandes_betweenness_centrality(const Graph&amp; g, CentralityMap centrality_map,
EdgeCentralityMap edge_centrality,
IncomingMap incoming,
DistanceMap distance, DependencyMap dependency,
PathCountMap path_count,
VertexIndexMap vertex_index,
WeightMap weight_map);
<em>// helper functions</em>
template&lt;typename Graph, typename CentralityMap&gt;
void
relative_betweenness_centrality(const Graph&amp; g, CentralityMap centrality_map);
template&lt;typename Graph, typename CentralityMap&gt;
typename property_traits&lt;CentralityMap&gt;::value_type
central_point_dominance(const Graph&amp; g, CentralityMap centrality_map);
</pre>
<p>This algorithm&nbsp;[<a href="bibliography.html#brandes01">54</a>]
computes the <em>betweenness centrality</em>&nbsp;[<a
href="bibliography.html#freeman77">55</a>,<a
href="bibliography.html#anthonisse71">56</a>] of each vertex or each
edge in the graph. The betweenness centrality of a vertex <em>v</em>
is defined by
<p><img src="figs/betweenness_centrality.gif">,
<p>where <img src="figs/sigma_st.gif"> is the number of shortest paths from
vertex <em>s</em> to vertex <em>t</em> and <img src="figs/sigma_stv.gif">
is the number of shortest paths from vertex <em>s</em> to vertex
<em>t</em> that pass through vertex <em>v</em>.
<!-- \sum_{s \neq v \neq t}\frac{\sigma_{st}(v)}{\sigma_{st}} -->
<p>The edge betweenness centrality indicates for each edge the
betweenness centrality that was contributed to the target(s) of the
edge (plural for undirected graphs). Similar to (vertex) betweenness
centrality, edge betweenness centrality can be used to determine the
edges through which most shortest paths must pass. A single invocation
of this algorithm can compute either the vertex or edge centrality (or
both).</p>
<p>This algorithm can operate either on weighted graphs (if a suitable
edge weight map is supplied) or unweighted graphs (if no edge weight
map is supplied). The result is the absolute betweenness centrality;
to convert to the relative betweenness centrality, which scales each
absolute centrality by <img src="figs/rel_betweenness_centrality.gif">
(where <em>n</em> is the number of vertices in the graph), use
<tt>relative_betweenness_centrality</tt>. Given the relative
betweenness centrality, one can compute the <em>central point
dominance</em>&nbsp;[<a href="bibliography.html#freeman77">55</a>], which is a measure of the maximum "betweenness" of any
point in the graph: it will be 0 for complete graphs and
1 for "wheel" graphs (in which there is a central vertex that all
paths include; see <a href="#Fig1">Fig. 1</a>). Let <img src="figs/v_star.gif"> be the vertex with the largest relative betweenness centrality; then, the central point dominance is defined as:
<p><img src="figs/central_point_dominance.gif">
<!-- C_B' = \frac{\sum_{v \in V} C_B(v^*) - C_B'(v)}{n-1} -->
<p><a name="Fig1">
<table border="1">
<thead>
<tr>
<th>Fig. 1: A wheel graph, where every path travels through the central node. <br>The central point dominance of this graph is 1.</td>
</tr>
</thead>
<tbody>
<tr>
<td align="center"><img src="figs/wheel_graph.gif"></td>
</tr>
</tbody>
</table>
<h3>Where Defined</h3>
<a href="../../../boost/graph/betweenness_centrality.hpp"><tt>boost/graph/betweenness_centrality.hpp</tt></a>
<h3>Parameters</h3>
IN: <tt>const Graph&amp; g</tt>
<blockquote>
The graph object on which the algorithm will be applied. The type
<tt>Graph</tt> must be a model of <a
href="VertexListGraph.html">Vertex List Graph</a> and <a
href="IncidenceGraph.html">Incidence Graph</a>. When an edge
centrality map is supplied, it must also model <a
href="EdgeListGraph.html">Edge List Graph</a>.<br>
<b>Python</b>: The parameter is named <tt>graph</tt>.
</blockquote>
UTIL: <tt>IncomingMap incoming</tt>
<blockquote>
This property map records the set of edges incoming to each vertex that comprise a shortest path from a particular source vertex through this vertex, and is used internally by the algorithm.The <tt>IncomingMap</tt> type must be a <a
href="../../property_map/LvaluePropertyMap.html">Lvalue Property
Map</a> whose key type is the same as the vertex descriptor type of
the graph and whose value type is a Sequence (e.g., an
<tt>std::vector</tt>) containing edge descriptors.<br>
<b>Default:</b> <a
href="../../property_map/iterator_property_map.html">
<tt>iterator_property_map</tt></a> created from a
<tt>std::vector</tt> of <tt>std::vector&lt;Edge&gt;</tt>, where
<tt>Edge</tt> is the edge descriptor type of the graph.<br>
<b>Python</b>: Unsupported parameter.
</blockquote>
UTIL: <tt>DistanceMap distance_map</tt>
<blockquote>
The shortest path weight from each source vertex <tt>s</tt> to each
vertex in the graph <tt>g</tt> is recorded in this property map, but
the result is only used internally. The type <tt>DistanceMap</tt>
must be a model of <a
href="../../property_map/ReadWritePropertyMap.html">Read/Write
Property Map</a>. The vertex descriptor type of the graph needs to
be usable as the key type of the distance map. The value type of the
distance map is the element type of a <a
href="./Monoid.html">Monoid</a>.<br>
<b>Default:</b> <a
href="../../property_map/iterator_property_map.html">
<tt>iterator_property_map</tt></a> created from a
<tt>std::vector</tt> of the <tt>WeightMap</tt>'s value type (or the
<tt>vertices_size_type</tt> of the graph when no weight map exists)
of size <tt>num_vertices(g)</tt> and using the <tt>vertex_index</tt> for
the index map.<br>
<b>Python</b>: Unsupported parameter.
</blockquote>
UTIL: <tt>DependencyMap dependency</tt>
<blockquote>
Property map used internally to accumulate partial betweenness
centrality results. The type <tt>DependencyMap</tt> must be a model
of <a href="../../property_map/ReadWritePropertyMap.html">Read/Write
Property Map</a>. The vertex descriptor type of the graph needs to
be usable as the key type of the dependency map. The value type of
the dependency map must be compatible with the value type of the
centrality map.<br>
<b>Default:</b> <a
href="../../property_map/iterator_property_map.html">
<tt>iterator_property_map</tt></a> created from a
<tt>std::vector</tt> of the <tt>CentralityMap</tt>'s value type of
size <tt>num_vertices(g)</tt> and using the <tt>vertex_index</tt>
for the index map.<br>
<b>Python</b>: Unsupported parameter.
</blockquote>
UTIL: <tt>PathCountMap path_count</tt>
<blockquote>
Property map used internally to accumulate the number of paths that
pass through each particular vertex. The type <tt>PathCountMap</tt>
must be a model of <a
href="../../property_map/ReadWritePropertyMap.html">Read/Write
Property Map</a>. The vertex descriptor type of the graph needs to
be usable as the key type of the dependency map. The value type of
the dependency map must be an integral type large enough to store
the number of paths in the graph.<br>
<b>Default:</b> <a
href="../../property_map/iterator_property_map.html">
<tt>iterator_property_map</tt></a> created from a
<tt>std::vector</tt> of the <tt>degree_size_type</tt> of the graph of
size <tt>num_vertices(g)</tt> and using the <tt>vertex_index</tt>
for the index map.<br>
<b>Python</b>: Unsupported parameter.
</blockquote>
<h3>Named parameters</h3>
OUT/UTIL: <tt>CentralityMap centrality_map</tt>
<blockquote>
This property map is used to accumulate the betweenness centrality
of each vertex, and is the primary output of the algorithm. The type
<tt>CentralityMap</tt> must be a model of <a
href="../../property_map/ReadWritePropertyMap.html">Read/Write
Property Map</a>, with the graph's vertex descriptor type as its key
type. The value type of this property map should be a floating-point
or rational type.<br>
<b>Default:</b> a <tt>dummy_property_map</tt>, which requires no
work to compute and returns no answer.<br>
<b>Python</b>: The color map must be a <tt>vertex_double_map</tt> for
the graph.<br>
<b>Python default</b>: <tt>graph.get_vertex_double_map("centrality")</tt>
</blockquote>
OUT/UTIL: <tt>EdgeCentralityMap edge_centrality_map</tt>
<blockquote>
This property map is used to accumulate the betweenness centrality
of each edge, and is a secondary form of output for the
algorithm. The type <tt>EdgeCentralityMap</tt> must be a model of <a
href="../../property_map/ReadWritePropertyMap.html">Read/Write
Property Map</a>, with the graph's edge descriptor type as its key
type. The value type of this property map should be the same as the
value type of the <tt>CentralityMap</tt> property map.<br>
<b>Default:</b> a <tt>dummy_property_map</tt>, which requires no
work to compute and returns no answer.<br>
<b>Python</b>: The color map must be a <tt>edge_double_map</tt> for
the graph.<br>
<b>Python default</b>: <tt>graph.get_edge_double_map("centrality")</tt>
</blockquote>
IN: <tt>vertex_index_map(VertexIndexMap vertex_index)</tt>
<blockquote>
This maps each vertex to an integer in the range <tt>[0,
num_vertices(g))</tt>. This is necessary for efficient updates of the
heap data structure when an edge is relaxed. The type
<tt>VertexIndexMap</tt> must be a model of
<a href="../../property_map/ReadablePropertyMap.html">Readable Property Map</a>. The value type of the map must be an
integer type. The vertex descriptor type of the graph needs to be
usable as the key type of the map.<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
not have an internal <tt>vertex_index</tt> property.<br>
<b>Python</b>: Unsupported parameter.
</blockquote>
IN: <tt>weight_map(WeightMap w_map)</tt>
<blockquote>
The weight or ``length'' of each edge in the graph. The weights
must all be non-negative, and the algorithm will throw a
<a href="./exception.html#negative_edge"><tt>negative_edge</tt></a>
exception is one of the edges is negative.
The type <tt>WeightMap</tt> must be a model of
<a href="../../property_map/ReadablePropertyMap.html">Readable Property Map</a>. The edge descriptor type of
the graph needs to be usable as the key type for the weight
map. The value type for this map must be
the same as the value type of the distance map.<br>
<b>Default:</b> All edge weights are assumed to be equivalent.
<b>Python</b>: If supplied, must be an <tt>edge_double_map</tt> for the graph.
</blockquote>
<h3>Complexity</h3>
The time complexity is <em>O(VE)</em> for unweighted graphs and
<em>O(VE + V(V+E) log V)</em> for weighted graphs. The space complexity
is <em>O(VE)</em>.
<hr>
<TABLE>
<TR valign=top>
<TD nowrap>Copyright &copy 2004</TD><TD>
<A HREF="../../../people/doug_gregor.html">Douglas Gregor</A>, Indiana University (dgregor@cs.indiana.edu</A>)<br>
<A HREF=http://www.osl.iu.edu/~lums>Andrew Lumsdaine</A>,
Indiana University (<A
HREF="mailto:lums@osl.iu.edu">lums@osl.iu.edu</A>)
</TD></TR></TABLE>
<!-- Created: Fri Jun 4 16:42:50 EST 2004 -->
<!-- hhmts start -->Last modified: Tue Mar 1 14:14:51 EST 2005 <!-- hhmts end -->
</body>
</html>
+4 -8
View File
@@ -2,19 +2,15 @@
<!--
-- Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 2000
--
-- Permission to use, copy, modify, distribute and sell this software
-- and its documentation for any purpose is hereby granted without fee,
-- provided that the above copyright notice appears in all copies and
-- that both that copyright notice and this permission notice appear
-- in supporting documentation. We make no
-- representations about the suitability of this software for any
-- purpose. It is provided "as is" without express or implied warranty.
-- 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: bfs_visitor</Title>
<BODY BGCOLOR="#ffffff" LINK="#0000ee" TEXT="#000000" VLINK="#551a8b"
ALINK="#ff0000">
<IMG SRC="../../../c++boost.gif"
<IMG SRC="../../../boost.png"
ALT="C++ Boost" width="277" height="86">
<BR Clear>
+4 -8
View File
@@ -2,19 +2,15 @@
<!--
-- Copyright (c) Jeremy Siek 2000
--
-- Permission to use, copy, modify, distribute and sell this software
-- and its documentation for any purpose is hereby granted without fee,
-- provided that the above copyright notice appears in all copies and
-- that both that copyright notice and this permission notice appear
-- in supporting documentation. Jeremy Siek makes no
-- representations about the suitability of this software for any
-- purpose. It is provided "as is" without express or implied warranty.
-- 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: Named Parameters</Title>
<BODY BGCOLOR="#ffffff" LINK="#0000ee" TEXT="#000000" VLINK="#551a8b"
ALINK="#ff0000">
<IMG SRC="../../../c++boost.gif"
<IMG SRC="../../../boost.png"
ALT="C++ Boost" width="277" height="86">
<BR Clear>
+78 -9
View File
@@ -2,19 +2,15 @@
<!--
-- Copyright (c) Jeremy Siek 2000
--
-- Permission to use, copy, modify, distribute and sell this software
-- and its documentation for any purpose is hereby granted without fee,
-- provided that the above copyright notice appears in all copies and
-- that both that copyright notice and this permission notice appear
-- in supporting documentation. Silicon Graphics makes no
-- representations about the suitability of this software for any
-- purpose. It is provided "as is" without express or implied warranty.
-- 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: Bibliography</Title>
<BODY BGCOLOR="#ffffff" LINK="#0000ee" TEXT="#000000" VLINK="#551a8b"
ALINK="#ff0000">
<IMG SRC="../../../c++boost.gif"
<IMG SRC="../../../boost.png"
ALT="C++ Boost" width="277" height="86">
<BR Clear>
@@ -332,8 +328,81 @@ Automata, Languages and Programming, 376-386, 1986
<EM>A Transitive Closure Algorithm</EM><br>
BIT, 10, 1970, pp. 76-94.
</DL>
<p></p><dt><a name="brandes01">54</a>
<dd>Ulrik Brandes<br>
<em><a href="http://ella.slis.indiana.edu/~katy/L579/brandes.pdf">A
Faster Algorithm for Betweenness Centrality</a></em><br>
Journal of Mathematical Sociology 25 (2):163-177, 2001.
<p></p><dt><a name="freeman77">55</a>
<dd>Lindon C. Freeman<br>
<em>A Set of Measures of Centrality Based on Betweenness</em><br>
Sociometry 40, pp. 35-41, 1977.
<p></p><dt><a name="anthonisse71">56</a>
<dd>J.M. Anthonisse<br>
<em>The rush in a directed graph.</em><br>
Technical Report BN9/71, Stichting Mahtematisch Centrum, Amsterdam, 1971.
<p></p><dt><a name="kamada89">57</a>
<dd>T. Kamada and S. Kawai<br>
<em>An algorithm for drawing general undirected graphs.</em><br>
Information Processing Letters, 31, pp. 7-15, 1989.
<p></p><dt><a name="fruchterman91">58</a>
<dd>T. Fruchterman and E. Reingold<br>
<em>Graph drawing by force-directed placement.</em><br>
Software--Practice & Experience, 21 (11), pp. 1129-1164, 1991.
<p></p><dt><a name="coleman83">59</a>
<dd>Thomas F. Coleman and Jorge J. More<br>
<em>Estimation of sparse Jacobian
matrices and graph coloring problems.</em><br>
Journal of Numerical Analasis V20, pp. 187-209, 1983.
<p></p><dt><a name="gursoy00">60</a>
<dd>Attila G&uuml;rsoy and Murat Atun<br>
<em>Neighborhood Preserving Load Balancing: A Self-Organizing Approach</em>
<br>
Euro-Par Parallel Processing, LNCS 1900, pp. 324-41, 2000.
<p></p><dt><a name="driscoll88">61</a>
<dd>James R. Driscoll, Harold N. Gabow, Ruth Shrairman, and Robert E. Tarjan<br>
<em>Relaxed Heaps: An alternative for Fibonacci Heaps with applications to parallel computation.</em><br>
Communications of the ACM, 31 (11), pp. 1343-1354, November 1988.
<p></p><dt><a name="king70">62</a>
<dd>King, I. P.<br>
<em>An automatic reordering scheme for simultaneous equations derived from network analysis.</em><br>
Int. J. Numer. Methods Engrg. 2, pp. 523-533, 1970.
<p></p><dt><a name="palmer2000">63</a>
<dd>C. Palmer and J. Steffan<br>
<em>Generating Network Topologies That Obey Power Laws</em><br>
Proceedings of GLOBECOM. November, 2000.
<p></p><dt><a name="edmonds65">64</a>
<dd>J. Edmonds<br>
<em>Paths, trees, and flowers</em><br>
Canadian Journal of Mathematics 17 (1965), pp. 449-467.
<p></p><dt><a name="lengauer-tarjan79">65</a>
<dd>Thomas Lengauer and Robert Endre Tarjan<br>
<em>A fast algorithm for finding dominators in a flowgraph</em><br>
ACM Transactions on Programming Language and Systems, 1(1):121-141, 1979.
<p></p><dt><a name="muchnick97">66</a>
<dd>Steven S. Muchnick<br>
<em>Advanced Compiler Design and Implementation</em><br>
Morgan Kaufmann Publishers, San Fransisco, 1997.
<p></p><dt><a name="appel98">67</a>
<dd>Andrew W. Appel<br>
<em>Modern Compiler Implementation in JAVA</em><br>
Cambridge University Press, 1998.
</dl>
<br>
<HR>
<TABLE>
+254
View File
@@ -0,0 +1,254 @@
<HTML>
<!--
-- Copyright 2001-2004 The Trustees of Indiana University.
--
-- Use, modification and distribution is 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)
--
-- Authors: Douglas Gregor
-- Jeremy Siek
-- Andrew Lumsdaine
-->
<Head>
<Title>Boost Graph Library: Biconnected Components and Articulation Points</Title>
<BODY BGCOLOR="#ffffff" LINK="#0000ee" TEXT="#000000" VLINK="#551a8b"
ALINK="#ff0000">
<IMG SRC="../../../boost.png"
ALT="C++ Boost" width="277" height="86">
<BR Clear>
<h1>
<TT>
<img src="figs/python.gif" alt="(Python)"/>
<A NAME="sec:biconnected-components">biconnected_components
</A>
</TT>
and
<tt>articulation_points</tt>
</h1>
<PRE>
<i>// named parameter version</i>
template &lt;typename Graph, typename ComponentMap, typename OutputIterator,
typename P, typename T, typename R&gt;
std::pair&lt;std::size_t, OutputIterator&gt;
biconnected_components(const Graph& g, ComponentMap comp, OutputIterator out,
const bgl_named_params&lt;P, T, R&gt;&amp; params)
template &lt;typename Graph, typename ComponentMap,
typename P, typename T, typename R&gt;
std::size_t
biconnected_components(const Graph& g, ComponentMap comp,
const bgl_named_params&lt;P, T, R&gt;&amp; params)
template &lt;typename Graph, typename OutputIterator,
typename P, typename T, typename R&gt;
OutputIterator articulation_points(const Graph& g, OutputIterator out,
const bgl_named_params&lt;P, T, R&gt;&amp; params)
<i>// non-named parameter version</i>
template &lt;typename Graph, typename ComponentMap, typename OutputIterator,
typename DiscoverTimeMap, typename LowPointMap&gt;
std::pair&lt;std::size_t, OutputIterator&gt;
biconnected_components(const Graph& g, ComponentMap comp, OutputIterator out,
DiscoverTimeMap discover_time, LowPointMap lowpt);
template &lt;typename Graph, typename ComponentMap, typename OutputIterator&gt;
std::pair&lt;std::size_t, OutputIterator&gt;
biconnected_components(const Graph& g, ComponentMap comp, OutputIterator out);
template &lt;typename Graph, typename ComponentMap&gt;
std::size_t biconnected_components(const Graph& g, ComponentMap comp);
<a name="sec:articulation_points">
template &lt;typename Graph, typename OutputIterator&gt;
OutputIterator articulation_points(const Graph& g, OutputIterator out);
</PRE>
<P>
A connected graph is <i>biconnected</i> if the removal of any single
vertex (and all edges incident on that vertex) can not disconnect the
graph. More generally, the biconnected components of a graph are the
maximal subsets of vertices such that the removal of a vertex from a
particular component will not disconnect the component. Unlike
connected components, vertices may belong to multiple biconnected
components: those vertices that belong to more than one biconnected
component are called <em>articulation points</em> or, equivalently,
<em>cut vertices</em>. Articulation points are vertices whose removal
would increase the number of connected components in the graph. Thus,
a graph without articulation points is biconnected. The following
figure illustrates the articulation points and biconnected components
of a small graph:
<p><center><img src="figs/biconnected.png"></center>
<p>Vertices can be present in multiple biconnected components, but each
edge can only be contained in a single biconnected component. The
output of the <tt>biconnected_components</tt> algorithm records the
biconnected component number of each edge in the property map
<tt>comp</tt>. Articulation points will be emitted to the (optional)
output iterator argument to <tt>biconnected_components</tt>, or can be
computed without the use of a biconnected component number map via
<tt>articulation_points</tt>. These functions return the number of
biconnected components, the articulation point output iterator, or a
pair of these quantities, depending on what information was
recorded.
<p>The algorithm implemented is due to Tarjan [<a href="bibliography.html#tarjan72:dfs_and_linear_algo">41</a>].
<H3>Where Defined</H3>
<P>
<a href="../../../boost/graph/biconnected_components.hpp"><TT>boost/graph/biconnected_components.hpp</TT></a>
<h3>Parameters</h3>
IN: <tt>const Graph&amp; g</tt>
<blockquote>
An undirected graph. The graph type must be a model of <a
href="VertexListGraph.html">Vertex List Graph</a> and <a
href="IncidenceGraph.html">Incidence Graph</a>.<br>
<b>Python</b>: The parameter is named <tt>graph</tt>.
</blockquote>
OUT: <tt>ComponentMap c</tt>
<blockquote>
The algorithm computes how many biconnected components are in the graph,
and assigning each component an integer label. The algorithm then
records which component each edge in the graph belongs to by
recording the component number in the component property map. The
<tt>ComponentMap</tt> type must be a model of <a
href="../../property_map/WritablePropertyMap.html">Writable Property
Map</a>. The value type shouch be an integer type, preferably the same
as the <tt>edges_size_type</tt> of the graph. The key type must be
the graph's edge descriptor type.<br>
<b>Default</b>: <tt>dummy_property_map</tt>.<br>
<b>Python</b>: Must be an <tt>edge_int_map</tt> for the graph.<br>
<b>Python default</b>: <tt>graph.get_edge_int_map("bicomponent")</tt>
</blockquote>
OUT: <tt>OutputIterator out</tt>
<blockquote>
The algorithm writes articulation points via this output
iterator and returns the resulting iterator.<br>
<b>Default</b>: a dummy iterator that ignores values written to it.<br>
<b>Python</b>: this parameter is not used in Python. Instead, both
algorithms return a Python <tt>list</tt> containing the articulation
points.
</blockquote>
<h3>Named Parameters</h3>
IN: <tt>vertex_index_map(VertexIndexMap i_map)</tt>
<blockquote>
This maps each vertex to an integer in the range <tt>[0,
num_vertices(g))</tt>. The type
<tt>VertexIndexMap</tt> must be a model of
<a href="../../property_map/ReadablePropertyMap.html">Readable Property Map</a>. The value type of the map must be an
integer type. The vertex descriptor type of the graph needs to be
usable as the key type of the map.<br>
<b>Default:</b> <tt>get(vertex_index, g)</tt><br>
<b>Python</b>: Unsupported parameter.
</blockquote>
UTIL/OUT: <tt>discover_time_map(DiscoverTimeMap discover_time)</tt>
<blockquote>
The discovery time of each vertex in the depth-first search. The
type <tt>DiscoverTimeMap</tt> must be a model of <a
href="../../property_map/ReadWritePropertyMap.html">Read/Write
Property Map</a>. The value type of the map must be an integer
type. The vertex descriptor type of the graph needs to be usable as
the key type of the map.<br>
<b>Default</b>: an <a
href="../../property_map/iterator_property_map.html">
</tt>iterator_property_map</tt></a> created from a
<tt>std::vector</tt> of <tt>vertices_size_type</tt> of size
<tt>num_vertices(g)</tt> and using <tt>get(vertex_index, g)</tt> for
the index map.<br>
<b>Python</b>: Unsupported parameter.
</blockquote>
UTIL/OUT: <tt>lowpoint_map(LowPointMap lowpt)</tt>
<blockquote>
The low point of each vertex in the depth-first search, which is the
smallest vertex reachable from a given vertex with at most one back
edge. The type <tt>LowPointMap</tt> must be a model of <a
href="../../property_map/ReadWritePropertyMap.html">Read/Write
Property Map</a>. The value type of the map must be an integer
type. The vertex descriptor type of the graph needs to be usable as
the key type of the map.<br>
<b>Default</b>: an <a
href="../../property_map/iterator_property_map.html">
</tt>iterator_property_map</tt></a> created from a
<tt>std::vector</tt> of <tt>vertices_size_type</tt> of size
<tt>num_vertices(g)</tt> and using <tt>get(vertex_index, g)</tt> for
the index map.<br>
<b>Python</b>: Unsupported parameter.
</blockquote>
UTIL/OUT: <tt>predecessor_map(PredecessorMap p_map)</tt>
<blockquote>
The predecessor map records the depth first search tree.
The <tt>PredecessorMap</tt> type
must be a <a
href="../../property_map/ReadWritePropertyMap.html">Read/Write
Property Map</a> whose key and value types are the same as the vertex
descriptor type of the graph.<br>
<b>Default:</b> an <a
href="../../property_map/iterator_property_map.html">
</tt>iterator_property_map</tt></a> created from a
<tt>std::vector</tt> of <tt>vertex_descriptor</tt> of size
<tt>num_vertices(g)</tt> and using <tt>get(vertex_index, g)</tt> for
the index map.<br>
<b>Python</b>: Must be a <tt>vertex_vertex_map</tt> for the graph.<br>
</blockquote>
IN: <tt>visitor(DFSVisitor vis)</tt>
<blockquote>
A visitor object that is invoked inside the algorithm at the
event-points specified by the <a href="./DFSVisitor.html">DFS
Visitor</a> concept. The visitor object is passed by value <a
href="#1">[1]</a>. <br> <b>Default:</b>
<tt>dfs_visitor&lt;null_visitor&gt;</tt><br>
<b>Python</b>: The parameter should be an object that derives from
the <a href="DFSVisitor.html#python"><tt>DFSVisitor</tt></a> type of
the graph.
</blockquote>
<H3>Complexity</H3>
<P>
The time complexity for the biconnected components and articulation
points algorithms
<i>O(V + E)</i>.
<P>
<H3>Example</H3>
<P> The file <a
href="../example/biconnected_components.cpp"><tt>examples/biconnected_components.cpp</tt></a>
contains an example of calculating the biconnected components and
articulation points of an undirected graph.
<br>
<HR>
<TABLE>
<TR valign=top>
<TD nowrap>Copyright &copy 2000-2004</TD><TD>
<A HREF="../../../people/jeremy_siek.htm">Jeremy Siek</A>, Indiana
University (<A
HREF="mailto:jsiek@osl.iu.edu">jsiek@osl.iu.edu</A>)<br>
<a href="../../../people/doug_gregor.html">Doug Gregor</a>, Indiana University
</TD></TR></TABLE>
</BODY>
</HTML>
+34 -16
View File
@@ -2,30 +2,27 @@
<!--
-- Copyright (c) Jeremy Siek 2000, 2001
--
-- Permission to use, copy, modify, distribute and sell this software
-- and its documentation for any purpose is hereby granted without fee,
-- provided that the above copyright notice appears in all copies and
-- that both that copyright notice and this permission notice appear
-- in supporting documentation. Silicon Graphics makes no
-- representations about the suitability of this software for any
-- purpose. It is provided "as is" without express or implied warranty.
-- 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: Breadth-First Search</Title>
<BODY BGCOLOR="#ffffff" LINK="#0000ee" TEXT="#000000" VLINK="#551a8b"
ALINK="#ff0000">
<IMG SRC="../../../c++boost.gif"
<IMG SRC="../../../boost.png"
ALT="C++ Boost" width="277" height="86">
<BR Clear>
<H1><A NAME="sec:bfs">
<img src="figs/python.gif" alt="(Python)"/>
<TT>breadth_first_search</TT>
</H1>
<P>
<PRE>
<i>// named paramter version</i>
<i>// named parameter version</i>
template &lt;class Graph, class P, class T, class R&gt;
void breadth_first_search(Graph& G,
typename graph_traits&lt;Graph&gt;::vertex_descriptor s,
@@ -157,12 +154,16 @@ IN: <tt>Graph&amp; g</tt>
<blockquote>
A directed or undirected graph. The graph type must
be a model of <a href="./VertexListGraph.html">Vertex List Graph</a>
and <a href="./IncidenceGraph.html">Incidence Graph</a>.
and <a href="./IncidenceGraph.html">Incidence Graph</a>.<br>
<b>Python</b>: The parameter is named <tt>graph</tt>.
</blockquote>
IN: <tt>vertex_descriptor s</tt>
<blockquote>
The source vertex where the search is started.
The source vertex where the search is started.<br>
<b>Python</b>: The parameter is named <tt>root_vertex</tt>.
</blockquote>
@@ -174,7 +175,11 @@ IN: <tt>visitor(BFSVisitor vis)</tt>
event-points specified by the <a href="BFSVisitor.html">BFS
Visitor</a> concept. The visitor object is passed by value <a
href="#1">[1]</a>.<br> <b>Default:</b>
<tt>bfs_visitor&lt;null_visitor&gt;</tt>
<tt>bfs_visitor&lt;null_visitor&gt;</tt> <br>
<b>Python</b>: The parameter should be an object that derives from
the <a href="BFSVisitor.html#python"><tt>BFSVisitor</tt></a> type of the graph.
</blockquote>
UTIL/OUT: <tt>color_map(ColorMap color)</tt>
@@ -198,7 +203,10 @@ UTIL/OUT: <tt>color_map(ColorMap color)</tt>
</tt>iterator_property_map</tt></a> created from a
<tt>std::vector</tt> of <tt>default_color_type</tt> of size
<tt>num_vertices(g)</tt> and using the <tt>i_map</tt> for the index
map.
map.<br>
<b>Python</b>: The color map must be a <tt>vertex_color_map</tt> for
the graph.
</blockquote>
IN: <tt>vertex_index_map(VertexIndexMap i_map)</tt>
@@ -212,7 +220,13 @@ IN: <tt>vertex_index_map(VertexIndexMap i_map)</tt>
vertex descriptor type of the graph needs to be usable as the key
type of the map.<br>
<b>Default:</b> <tt>get(vertex_index, g)</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
not have an internal <tt>vertex_index</tt> property.<br>
<b>Python</b>: Unsupported parameter.
</blockquote>
UTIL: <tt>buffer(Buffer&amp; Q)</tt>
@@ -224,8 +238,12 @@ UTIL: <tt>buffer(Buffer&amp; Q)</tt>
For example Dijkstra's algorithm can be implemented
using a priority queue. The type <tt>Buffer</tt> must be a model of
<a href="./Buffer.html">Buffer</a>.<br> The <tt>value_type</tt>
of the buffer must be the <tt>vertex_descriptor</tt> type for the graph.
<b>Default:</b> <tt>boost::queue</tt>
of the buffer must be the <tt>vertex_descriptor</tt> type for the graph.<br>
<b>Default:</b> <tt>boost::queue</tt><br>
<b>Python</b>: The buffer must derive from the <a
href="./Buffer.html">Buffer</a> type for the graph.
</blockquote>
+23 -14
View File
@@ -2,24 +2,20 @@
<!--
-- Copyright (c) Jeremy Siek 2000, 2001
--
-- Permission to use, copy, modify, distribute and sell this software
-- and its documentation for any purpose is hereby granted without fee,
-- provided that the above copyright notice appears in all copies and
-- that both that copyright notice and this permission notice appear
-- in supporting documentation. Silicon Graphics makes no
-- representations about the suitability of this software for any
-- purpose. It is provided "as is" without express or implied warranty.
-- 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: Breadth-First Visit</Title>
<BODY BGCOLOR="#ffffff" LINK="#0000ee" TEXT="#000000" VLINK="#551a8b"
ALINK="#ff0000">
<IMG SRC="../../../c++boost.gif"
<IMG SRC="../../../boost.png"
ALT="C++ Boost" width="277" height="86">
<BR Clear>
<H1><A NAME="sec:bfv">
<H1><A NAME="sec:bfv"><img src="figs/python.gif" alt="(Python)"/>
<TT>breadth_first_visit</TT>
</H1>
@@ -60,12 +56,16 @@ only reaches a small portion of the graph.
IN: <tt>IncidenceGraph&amp; g</tt>
<blockquote>
A directed or undirected graph. The graph type must
be a model of <a href="./IncidenceGraph.html">Incidence Graph</a>.
be a model of <a href="./IncidenceGraph.html">Incidence Graph</a>.<br>
<b>Python</b>: The parameter is named <tt>graph</tt>.
</blockquote>
IN: <tt>vertex_descriptor s</tt>
<blockquote>
The source vertex where the search is started.
The source vertex where the search is started.<br>
<b>Python</b>: The parameter is named <tt>root_vertex</tt>.
</blockquote>
@@ -77,7 +77,10 @@ IN: <tt>visitor(BFSVisitor vis)</tt>
event-points specified by the <a href="BFSVisitor.html">BFS
Visitor</a> concept. The visitor object is passed by value <a
href="#1">[1]</a>.<br> <b>Default:</b>
<tt>bfs_visitor&lt;null_visitor&gt;</tt>
<tt>bfs_visitor&lt;null_visitor&gt;</tt><br>
<b>Python</b>: The parameter should be an object that derives from
the <a href="BFSVisitor.html#python"><tt>BFSVisitor</tt></a> type of the graph.
</blockquote>
UTIL/OUT: <tt>color_map(ColorMap color)</tt>
@@ -88,7 +91,10 @@ UTIL/OUT: <tt>color_map(ColorMap color)</tt>
Property Map</a> and its key type must be the graph's vertex
descriptor type and the value type of the color map must model
<a href="./ColorValue.html">ColorValue</a>.<br>
<b>Default:</b> <tt>get(vertex_color, g)</tt>
<b>Default:</b> <tt>get(vertex_color, g)</tt><br>
<b>Python</b>: The color map must be a <tt>vertex_color_map</tt> for
the graph.
</blockquote>
UTIL: <tt>buffer(Buffer&amp; Q)</tt>
@@ -100,7 +106,10 @@ UTIL: <tt>buffer(Buffer&amp; Q)</tt>
For example Dijkstra's algorithm can be implemented
using a priority queue. The type <tt>Buffer</tt> must be a model of
<a href="./Buffer.html">Buffer</a>.<br>
<b>Default:</b> <tt>boost::queue</tt>
<b>Default:</b> <tt>boost::queue</tt><br>
<b>Python</b>: The buffer must derive from the <a
href="./Buffer.html">Buffer</a> type for the graph.
</blockquote>
+178
View File
@@ -0,0 +1,178 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<!--
-- Copyright Doug Gregor 2004. Use, modification and
-- distribution is 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)
-- For more information, see http://www.boost.org
-->
<head>
<title>Bundled Properties</title>
</head>
<body BGCOLOR="#ffffff" LINK="#0000ee" TEXT="#000000" VLINK="#551a8b"
ALINK="#ff0000">
<IMG SRC="../../../boost.png"
ALT="C++ Boost" width="277" height="86"/>
<h1>Bundled Properties</h1>
<p>Class templates <code><a
href="adjacency_list.html">adjacency_list</a></code> and
<code><a href="adjacency_matrix.html">adjacency_matrix</a></code> support
the introduction of named properties via <a
href="using_adjacency_list.html#sec:adjacency-list-properties">internal
properties</a>. However, this method is cumbersome in many uses,
where it would be more intuitive to just specify a structure or
class that contains internal properties for edges or
vertices. Bundled properties allow one to use
<code>adjacency_list</code> and <code>adjacency_matrix</code> in this
manner, providing a simple
way to introduce and access any number of internal properties
for vertices and edges.</p>
<p>One can introduce bundled properties into an
either graph type by providing a user-defined class
type for the <code>VertexProperties</code> or
<code>EdgeProperties</code> template arguments. The user-defined
class may alternatively be placed at the end of a
<code>property</code> list, replacing the (implicit)
<code>boost::no_property</code> argument.</p>
<h2>Example: Route planning</h2>
<p>Consider the implementation of a simple route planner that
should find the shortest directions from one city to another
via a set of highways. The vertices of the graph are cities,
and we may wish to store several bits of information about the
city within each vertex:</p>
<pre>
struct City
{
string name;
int population;
vector&lt;int&gt; zipcodes;
};
</pre>
<p>The edges in the graph represent highways, which also have
several interesting attributes:</p>
<pre>
struct Highway
{
string name;
double miles;
int speed_limit;
int lanes;
bool divided;
};
</pre>
<p>Without bundled properties, translating this example directly
into an instantiation of <code>adjacency_list</code> would
involve several custom properties and would result in a type
like this:</p>
<pre>
typedef boost::adjacency_list&lt;
boost::listS, boost::vecS, boost::bidirectionalS,
// Vertex properties
boost::property&lt;boost::vertex_name_t, std::string,
boost::property&lt;population_t, int,
boost::property&lt;zipcodes_t, std::vector&lt;int&gt; &gt; &gt; &gt;,
// Edge properties
boost::property&lt;boost::edge_name_t, std::string,
boost::property&lt;boost::edge_length_t, double,
boost::property&lt;edge_speed_limit_t, int,
boost::property&lt;edge_lanes_t, int,
boost::property&lt;edge_divided, bool&gt; &gt; &gt; &gt; &gt; &gt;
Map;
</pre>
<p>With bundled properties, we can directly use the
<code>City</code> and <code>Highway</code> structures:</p>
<pre>
typedef boost::adjacency_list&lt;
boost::listS, boost::vecS, boost::bidirectionalS,
City, Highway&gt; Map;
</pre>
<h2>Accessing bundled properties</h2>
<p>To access a bundled property for a particular edge or vertex,
subscript your graph with the descriptor of the edge or vertex
whose bundled property you wish to access. For instance:</p>
<pre>
Map map; // load the map
Map::vertex_descriptor v = *vertices(map).first;
map[v].name = "Troy";
map[v].population = 49170;
map[v].zipcodes.push_back(12180);
Map::edge_descriptor e = *out_edges(v, map).first;
map[e].name = "I-87";
map[e].miles = 10;
map[e].speed_limit = 65;
map[e].lanes = 4;
map[e].divided = true;
</pre>
<h2>Properties maps from bundled properties</h2>
<p>Often one needs to create a property map from an internal
property for use in a generic algorithm. For instance, using the
graph without bundled properties we might invoke <a
href="dijkstra_shortest_paths.html">Dijkstra's shortest
paths</a> algorithm like this:</p>
<pre>
vector&lt;double&gt; distances(num_vertices(map));
dijkstra_shortest_paths(map, from,
weight_map(get(edge_length, map))
.distance_map(make_iterator_property_map(distances.begin(),
get(vertex_index, map))));
</pre>
<p>With bundled properties, we can just pass a <em>member pointer</em>
as the property for <code>get</code>. The equivalent example
using bundled properties is:</p>
<pre>
vector&lt;double&gt; distances(num_vertices(map));
dijkstra_shortest_paths(map, from,
weight_map(get(<font color="#ff0000">&amp;Highway::miles</font>, map))
.distance_map(make_iterator_property_map(distances.begin(),
get(vertex_index, map))));
</pre>
<p>The type of the returned property map is <code>property_map&lt;Map, int Highway::*&gt;::type</code>
or <code>property_map&lt;Map, int Highway::*&gt;::const_type</code>, depending on whether the graph
<code>map</code> is non-constant or constant.
<p> You may also access the entire vertex or edge bundle as a property map
using the <code>vertex_bundle</code> or <code>edge_bundle</code> properties,
respectively. For instance, the property map returned by <code>get(vertex_bundle, map)</code> is
an <a href="../../property_map/LvaluePropertyMap.html">Lvalue Property Map</a> providing access to the
<code>City</code> values stored in each vertex.
<h2>Getting the type of bundled properties</h2>
<p>To get the type of the vertex or edge bundle for a given graph
type <tt>Graph</tt>, you can use the trait
classes <tt>vertex_bundle_type</tt>
and <tt>edge_bundle_type</tt>. The
type <tt>vertex_bundle_type&lt;Graph&gt;::type</tt> will be the
type bundled with vertices (or <tt>no_vertex_bundle</tt> if the
graph supports bundles but no vertex bundle
exists). Likewise, <tt>edge_bundle_type&lt;Graph&gt;::type</tt>
will be the type bundled with edges (or <tt>no_edge_bundle</tt> if
no edge bundle exists).</p>
<h2>Compatibility</h2> <p>Bundled properties will only work
properly on compilers that support class template partial
specialization.</p>
<hr>
Copyright &copy; 2004 <a href="../../../people/doug_gregor.html">Doug Gregor</a>.
<address><a href="mailto:gregod@cs.rpi.edu"></a></address>
<!-- Created: Fri May 7 09:59:21 EDT 2004 -->
<!-- hhmts start -->
Last modified: Fri May 7 10:56:01 EDT 2004
<!-- hhmts end -->
</body>
</html>
+17 -19
View File
@@ -2,19 +2,15 @@
<!--
-- Copyright (c) Jeremy Siek 2000
--
-- Permission to use, copy, modify, distribute and sell this software
-- and its documentation for any purpose is hereby granted without fee,
-- provided that the above copyright notice appears in all copies and
-- that both that copyright notice and this permission notice appear
-- in supporting documentation. Silicon Graphics makes no
-- representations about the suitability of this software for any
-- purpose. It is provided "as is" without express or implied warranty.
-- 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>Challenge</Title>
<BODY BGCOLOR="#ffffff" LINK="#0000ee" TEXT="#000000" VLINK="#551a8b"
ALINK="#ff0000">
<IMG SRC="../../../c++boost.gif"
<IMG SRC="../../../boost.png"
ALT="C++ Boost" width="277" height="86">
<BR Clear>
@@ -26,9 +22,9 @@
<ul>
<li>Dynamic graph algorithms such as described in <a
href="http://citeseer.nj.nec.com/eppstein99dynamic.html">Dynamic Graph
href="http://citeseer.ist.psu.edu/eppstein99dynamic.html">Dynamic Graph
Algorithms</a> and <a
href="http://citeseer.nj.nec.com/alberts98software.html">A Software
href="http://citeseer.ist.psu.edu/alberts98software.html">A Software
Library of Dynamic Graph Algorithms</a>.
<li>Polish up code/docs for pending items and champion the formal
@@ -62,8 +58,6 @@ polygons.</li>
according to a user defined comparison object.</li>
</ul>
<li>Floyd-Warshall algorithm.</li>
<li>Rewrite the Qhull algorithm using the Boost Graph Library (this is
high difficulty challenge). Or, for a more manageable challenge,
write an interface for Qhull with the BGL. <a
@@ -95,19 +89,23 @@ It is currently difficult to use from a C++ program.
<li>Modularize the tests in test/graph.cpp to apply to particular
concepts. Make sure there are run-time tests for every BGL concept.</li>
<li>Write tests for the BGL algorithms. Currently the examples
are used as a sanity check, but they do not constitute a real test. </li>
<li>Write tests for the BGL algorithms. There are a few, but
more are needed. The example provide a sanity check but do not
provide full coverage.</li>
<li>Write up the examples from Knuth's <i>Stanford GraphBase</i> using
the BGL. The file <a
href="../example/miles_span.cpp"><tt>examples/miles_span.cpp</tt></a>
is a start.
is a start.</li>
<li>Create a class to support sub-graph views of a graph, where a
sub-graph behaves just like a graph, but shares vertex and edge
properties with the original graph. Perhaps even support sub-graphs
of sub-graphs, etc.
<li>Further testing of the <tt>subgraph</tt> class and add more
features.</li>
<li>Implement a minimum-cost maximum-flow algorithm.</li>
<li>Make the <tt>type</tt> of all (internal) property maps convertible to the <tt>const_type</tt> of the property maps.<li>
<li>Add static functions to <tt>adjacency_list</tt> to return the per-vertex, per-edge, and per-graph overhead.</li>
</ul>
<br>
+51
View File
@@ -0,0 +1,51 @@
<html><!--
-- Copyright (c) 2004 Trustees of Indiana University
--
-- 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><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>Function template circle_graph_layout</title></head><body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF"><table cellpadding="2" width="100%"><td valign="top"><img src="../../../boost.png" alt="boost.png (6897 bytes)" width="277" height="86"></td><td align="center"><a href="../../../index.htm">Home</a></td><td align="center"><a href="../../libraries.htm">Libraries</a></td><td align="center"><a href="../../../people/people.htm">People</a></td><td align="center"><a href="../../../more/faq.htm">FAQ</a></td><td align="center"><a href="../../../more/index.htm">More</a></td></table><hr><div class="refentry" lang="en"><a name="id103562-bb"></a><div class="titlepage"><div></div><div></div></div><div class="refnamediv"><h2><img src="figs/python.gif" alt="(Python)"/><span class="refentrytitle">Function template circle_graph_layout</span></h2><p>boost::circle_graph_layout &#8212; Layout the graph with the vertices at the points of a regular n-polygon. </p></div><h2 xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="refsynopsisdiv-title">Synopsis</h2><div xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" class="refsynopsisdiv"><pre class="synopsis">
<span class="bold"><b>template</b></span>&lt;<span class="bold"><b>typename</b></span> VertexListGraph, <span class="bold"><b>typename</b></span> PositionMap, <span class="bold"><b>typename</b></span> Radius&gt;
  <span class="type"><span class="bold"><b>void</b></span></span> circle_graph_layout(<span class="bold"><b>const</b></span> VertexListGraph &amp; g, PositionMap position,
                           Radius radius);</pre></div><div class="refsect1" lang="en"><a name="id821794"></a><h2>Where Defined</h2><a href="../../../boost/graph/circle_layout.hpp">boost/graph/circle_layout.hpp</a><h2>Description</h2><p>The distance from the center of the polygon to each point is determined by the <tt class="computeroutput">radius</tt> parameter. The <tt class="computeroutput">position</tt> parameter must be an Lvalue Property Map whose value type is a class type containing <tt class="computeroutput">x</tt> and <tt class="computeroutput">y</tt> members that will be set to the <tt class="computeroutput">x</tt> and <tt class="computeroutput">y</tt> coordinates.
<h2>Parameters</h2>
IN: <tt>const VertexListGraph&amp; g</tt>
<blockquote>
The graph object on which the algorithm will be applied. The type
<tt>VertexListGraph</tt> must be a model of <a
href="VertexListGraph.html">Vertex List Graph</a>.<br>
<b>Python</b>: The parameter is named <tt>graph</tt>.
</blockquote>
OUT: <tt>PositionMap position</tt>
<blockquote>
This property map is used to store the position of each vertex. The
type <tt>PositionMap</tt> must be a model of <a
href="../../property_map/WritablePropertyMap.html">Writable Property
Map</a>, with the graph's edge descriptor type as its key type. The
value type of this property map should be assignable from the
type <tt>Radius</tt>. <br>
<b>Python</b>: The position map must be a <tt>vertex_point2d_map</tt> for
the graph.<br>
<b>Python default</b>: <tt>graph.get_vertex_point2d_map("position")</tt>
</blockquote>
IN: <tt>Radius radius</tt>
<blockquote>
This is the radius of the circle on which points will be layed
out. It must be compatible with <tt>double</tt>.<br>
</blockquote>
</p></div></div><table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr><td align="left"></td><td align="right"><small></small></td></tr></table><hr>
<TABLE>
<TR valign=top>
<TD nowrap>Copyright &copy 2004</TD><TD>
<A HREF="../../../people/doug_gregor.html">Douglas Gregor</A>, Indiana University (dgregor -at- cs.indiana.edu</A>)<br>
<A HREF=http://www.osl.iu.edu/~lums>Andrew Lumsdaine</A>,
Indiana University (lums -at- osl.iu.edu)
</TD></TR></TABLE>
</body></html>
+720
View File
@@ -0,0 +1,720 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<!--
-- Copyright (c) 2005 Trustees of Indiana University
--
-- 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>Compressed Sparse Row Graph</title>
<STYLE TYPE="text/css">
<!--
.indent
{
padding-left: 50pt;
padding-right: 50pt;
}
-->
</STYLE>
<script language="JavaScript" type="text/JavaScript">
<!--
function address(host, user) {
var atchar = '@';
var thingy = user+atchar+host;
thingy = '<a hre' + 'f=' + "mai" + "lto:" + thingy + '>' + user+atchar+host + '</a>';
document.write(thingy);
}
//-->
</script>
</head>
<body>
<IMG SRC="../../../boost.png"
ALT="C++ Boost" width="277" height="86"></img>
<h1>Compressed Sparse Row Graph</h1>
<p>The class template <code>compressed_sparse_row_graph</code> is
a graph class that uses the compact Compressed Sparse Row (CSR)
format to store directed graphs. While CSR graphs have much less
overhead than many other graph formats (e.g., <a
href="adjacency_list.html"><code>adjacency_list</code></a>), they
do not provide any mutability: one cannot add or remove vertices
or edges from a CSR graph. Use this format in high-performance
applications or for very large graphs that you do not need to
change.</p>
<p>The CSR format stores vertices and edges in separate arrays,
with the indices into these arrays corresponding to the identifier
for the vertex or edge, respectively. The edge array is sorted by
the source of each edge, but contains only the targets for the
edges. The vertex array stores offsets into the edge array,
providing the offset of the first edge outgoing from each
vertex. Iteration over the out-edges for the <i>i</i><sup>th</sup>
vertex in the graph is achieved by
visiting <tt>edge_array[vertex_array[i]]</tt>, <tt>edge_array[vertex_array[i]+1]</tt>,
..., <tt>edge_array[vertex_array[i+1]]</tt>. This format minimizes
memory use to <i>O(n + m)</i>, where <i>n</i> and <i>m</i> are the
number of vertices and edges, respectively. The constants
multiplied by <i>n</i> and <i>m</i> are based on the size of the
integers needed to represent indices into the edge and vertex
arrays, respectively, which can be controlled using
the <a href="#template-parms">template parameters</a>.</p>
<ul>
<li><a href="#synopsis">Synopsis</a></li>
<li><a href="#where">Where Defined</a></li>
<li><a href="#models">Models</a></li>
<li><a href="#template-parms">Template parameters</a></li>
<li><a href="#properties">Properties</a></li>
<li><a href="#member-functions">Member functions</a>
<ul>
<li><a href="#constructors">Constructors</a></li>
<li><a href="#mutators">Mutators</a></li>
<li><a href="#property-access">Property access</a></li>
</ul></li>
<li><a href="#non-members">Non-member functions</a>
<ul>
<li><a href="#vertex-access">Vertex access</a></li>
<li><a href="#edge-access">Edge access</a></li>
<li><a href="#property-map-accessors">Property map accessors</a></li>
<li><a href="#incremental-construction-functions">Incremental construction functions</a></li>
</ul></li>
<li><a href="#example">Example</a></li>
</ul>
<a name="synopsis"></a><h2>Synopsis</h2>
<pre>
namespace boost {
template&lt;typename <a href="#Directed">Directed</a> = directedS, typename <a href="#VertexProperty">VertexProperty</a> = void,
typename <a href="#EdgeProperty">EdgeProperty</a> = void, typename <a href="#GraphProperty">GraphProperty</a> = no_property,
typename <a href="#Vertex">Vertex</a> = std::size_t, typename <a href="#EdgeIndex">EdgeIndex</a> = Vertex&gt;
class compressed_sparse_row_graph
{
public:
<i>// <a href="#constructors">Graph constructors</a></i>
<a href="#default-const">compressed_sparse_row_graph</a>();
template&lt;typename InputIterator&gt;
<a href="#edge-const">compressed_sparse_row_graph</a>(InputIterator edge_begin, InputIterator edge_end,
vertices_size_type numverts,
edges_size_type numedges = 0,
const GraphProperty&amp; prop = GraphProperty());
template&lt;typename InputIterator, typename EdgePropertyIterator&gt;
<a href="#edge-prop-const">compressed_sparse_row_graph</a>(InputIterator edge_begin, InputIterator edge_end,
EdgePropertyIterator ep_iter,
vertices_size_type numverts,
edges_size_type numedges = 0,
const GraphProperty&amp; prop = GraphProperty());
template&lt;typename Graph, typename VertexIndexMap&gt;
<a href="#graph-const">compressed_sparse_row_graph</a>(const Graph&amp; g, const VertexIndexMap&amp; vi,
vertices_size_type numverts,
edges_size_type numedges);
template&lt;typename Graph, typename VertexIndexMap&gt;
compressed_sparse_row_graph(const Graph&amp; g, const VertexIndexMap&amp; vi);
template&lt;typename Graph&gt;
explicit <a href="#graph-const">compressed_sparse_row_graph</a>(const Graph&amp; g);
<i>// <a href="#mutators">Graph mutators</a></i>
template&lt;typename Graph, typename VertexIndexMap&gt;
void <a href="#assign">assign</a>(const Graph&amp; g, const VertexIndexMap&amp; vi,
vertices_size_type numverts, edges_size_type numedges);
template&lt;typename Graph, typename VertexIndexMap&gt;
void <a href="#assign">assign</a>(const Graph&amp; g, const VertexIndexMap&amp; vi);
template&lt;typename Graph&gt;
void <a href="#assign">assign</a>(const Graph&amp; g);
<i>// <a href="#property-access">Property Access</a></i>
VertexProperty&amp; <a href="#vertex-subscript">operator[]</a>(vertex_descriptor v);
const VertexProperty&amp; <a href="#vertex-subscript">operator[]</a>(vertex_descriptor v) const;
EdgeProperty&amp; <a href="#edge-subscript">operator[]</a>(edge_descriptor v);
const EdgeProperty&amp; <a href="#edge-subscript">operator[]</a>(edge_descriptor v) const;
};
<i>// <a href="IncidenceGraph.html">Incidence Graph requirements</a></i>
vertex_descriptor source(edge_descriptor, const compressed_sparse_row_graph&amp;);
vertex_descriptor target(edge_descriptor, const compressed_sparse_row_graph&amp;);
std::pair&lt;out_edge_iterator, out_edge_iterator&gt;
out_edges(vertex_descriptor, const compressed_sparse_row_graph&amp;);
degree_size_type out_degree(vertex_descriptor v, const compressed_sparse_row_graph&amp;);
<i>// <a href="AdjacencyGraph.html">Adjacency Graph requirements</a></i>
std::pair&lt;adjacency_iterator, adjacency_iterator&gt;
adjacent_vertices(vertex_descriptor, const compressed_sparse_row_graph&amp;);
<i>// <a href="VertexListGraph.html">Vertex List Graph requirements</a></i>
std::pair&lt;vertex_iterator, vertex_iterator&gt; vertices(const compressed_sparse_row_graph&amp;);
vertices_size_type num_vertices(const compressed_sparse_row_graph&amp;);
<i>// <a href="EdgeListGraph.html">Edge List Graph requirements</a></i>
std::pair&lt;edge_iterator, edge_iterator&gt; edges(const compressed_sparse_row_graph&amp;);
edges_size_type num_edges(const compressed_sparse_row_graph&amp;);
<i>// <a href="#vertex-access">Vertex access</a></i>
vertex_descriptor <a href="#vertex">vertex</a>(vertices_size_type i, const compressed_sparse_row_graph&amp;);
<i>// <a href="#edge-access">Edge access</a></i>
std::pair&lt;out_edge_iterator, out_edge_iterator&gt;
<a href="#edge_range">edge_range</a>(vertex_descriptor u, vertex_descriptor v, const compressed_sparse_row_graph&amp;);
std::pair&lt;edge_descriptor, bool&gt;
<a href="#edge">edge</a>(vertex_descriptor u, vertex_descriptor v, const compressed_sparse_row_graph&amp;);
edge_descriptor <a href="#edge_from_index">edge_from_index</a>(edges_size_type i, const compressed_sparse_row_graph&amp;);
<i>// <a href="#property-map-accessors">Property map accessors</a></i>
template&lt;typename <a href="./PropertyTag.html">PropertyTag</a>&gt;
property_map&lt;compressed_sparse_row_graph, PropertyTag&gt;::type
<a href="#get">get</a>(PropertyTag, compressed_sparse_row_graph&amp; g)
template&lt;typename <a href="./PropertyTag.html">PropertyTag</a>&gt;
property_map&lt;compressed_sparse_row_graph, Tag&gt;::const_type
<a href="#get">get</a>(PropertyTag, const compressed_sparse_row_graph&amp; g)
template&lt;typename <a href="./PropertyTag.html">PropertyTag</a>, class X&gt;
typename property_traits&lt;property_map&lt;compressed_sparse_row_graph, PropertyTag&gt;::const_type&gt::value_type
<a href="#get-x">get</a>(PropertyTag, const compressed_sparse_row_graph&amp; g, X x)
template&lt;typename <a href="./PropertyTag.html">PropertyTag</a>, class X, class Value&gt;
void <a href="#put-x">put</a>(PropertyTag, const compressed_sparse_row_graph&amp; g, X x, const Value&amp; value);
template&lt;typename <a href="./PropertyTag.html#GraphPropertyTag">GraphPropertyTag</a>&gt;
typename graph_property&lt;compressed_sparse_row_graph, GraphPropertyTag&gt;::type&amp;
<a href="#get_property">get_property</a>(compressed_sparse_row_graph&amp; g, GraphPropertyTag);
template&lt;typename <a href="./PropertyTag.html#GraphPropertyTag">GraphPropertyTag</a>&gt;
typename graph_property&lt;compressed_sparse_row_graph, GraphPropertyTag&gt;::type const &amp;
<a href="#get_property">get_property</a>(const compressed_sparse_row_graph&amp; g, GraphPropertyTag);
template&lt;typename <a href="./PropertyTag.html#GraphPropertyTag">GraphPropertyTag</a>&gt;
void <a href="#set_property">set_property</a>(const compressed_sparse_row_graph&amp; g, GraphPropertyTag,
const typename graph_property&lt;compressed_sparse_row_graph, GraphPropertyTag&gt;::type&amp; value);
<i>// <a href="#incremental-construction-functions">Incremental construction functions</a></i>
template&lt;typename Graph&gt;
vertex_descriptor <a href=#add_vertex">add_vertex</a>(compressed_sparse_row_graph&amp; g);
template&lt;typename Graph&gt;
vertex_descriptor <a href=#add_vertices">add_vertices</a>(vertices_size_type count, compressed_sparse_row_graph&amp; g);
template&lt;typename Graph&gt;
edge_descriptor <a href=#add_edge">add_vertices</a>(vertex_descriptor src, vertex_descriptor tgt, compressed_sparse_row_graph&amp; g);
} <i>// end namespace boost</i>
</pre>
<a name="where"></a><h2>Where Defined</h2>
<p><code>&lt;<a href="../../../boost/graph/compressed_sparse_row_graph.hpp">boost/graph/compressed_sparse_row_graph.hpp</a>&gt;</code></p>
<a name="models"></a><h2>Models</h2>
<p>The <tt>compressed_sparse_row_graph</tt> class template models
(i.e., implements the requirements of) many of the
BGL <a href="graph_concepts.html">graph concepts</a>, allowing it
to be used with most of the BGL algorithms. In particular, it
models the following specific graph concepts:</p>
<ul>
<li><a href="Graph.html">Graph</a></li>
<li><a href="IncidenceGraph.html">IncidenceGraph</a></li>
<li><a href="AdjacencyGraph.html">AdjacencyGraph</a></li>
<li><a href="VertexListGraph.html">VertexListGraph</a></li>
<li><a href="EdgeListGraph.html">EdgeListGraph</a></li>
<li><a href="PropertyGraph.html">PropertyGraph</a></li>
</ul>
<a name="template-parms"></a><h2>Template Parameters</h2>
<p>The <tt>compressed_sparse_row_graph</tt> class has several
template parameters that can customize the layout in memory and
what properties are attached to the graph itself. All
parameters have defaults, so users interested only in the
structure of a graph can use the
type <tt>compressed_sparse_row_graph&lt;&gt;</tt> and ignore
the parameters.</p>
<b>Parameters</b>
<br>
<br>
<a name="Directed"></a><code>Directed</code>
<blockquote>
A selector that determines whether the graph will be directed,
bidirectional or undirected. At this time, the CSR graph type
only supports directed graphs, so this value must
be <code>boost::directedS</code>.<br>
<b>Default</b>: <code>boost::directedS</code>
</blockquote>
<a name="VertexProperty"></a><code>VertexProperty</code>
<blockquote>
A class type that will be
attached to each vertex in the graph. If this value
is <code>void</code>, no properties will be attached to
the vertices of the graph.<br>
<b>Default</b>: <code>void</code>
</blockquote>
<a name="EdgeProperty"></a><code>EdgeProperty</code>
<blockquote>
A class type that will be attached to each edge in the graph. If
this value is <code>void</code>, no properties will be
attached to the edges of the graph.<br>
<b>Default</b>: <code>void</code>
</blockquote>
<a name="GraphProperty"></a><code>GraphProperty</code>
<blockquote>
A nested set
of <code>property</code> templates that describe the
properties of the graph itself. If this value
is <code>no_property</code>, no properties will be attached to
the graph.<br>
<b>Default</b>: <code>no_property</code>
</blockquote>
<a name="Vertex"></a><code>Vertex</code>
<blockquote>
An unsigned integral type that will be
used as both the index into the array of vertices and as the
vertex descriptor itself. Larger types permit the CSR graph to
store more vertices; smaller types reduce the storage required
per vertex.<br>
<b>Default</b>: <code>std::size_t</code>
</blockquote>
<a name="EdgeIndex"></a><code>EdgeIndex</code>
<blockquote>
An unsigned integral type that will be used as the index into
the array of edges. As with the <code>Vertex</code> parameter,
larger types permit more edges whereas smaller types reduce
the amount of storage needed per
edge. The <code>EdgeIndex</code> type shall not be smaller
than the <code>Vertex</code> type, but it may be larger. For
instance, <code>Vertex</code> may be a 16-bit integer
(allowing 32,767 vertices in the graph)
whereas <code>EdgeIndex</code> could then be a 32-bit integer
to allow a complete graph to be stored in the CSR format.<br>
<b>Default</b>: <code>Vertex</code>
</blockquote>
<a name="properties"></a><h2>Interior Properties</h2>
<p> The <tt>compressed_sparse_row_graph</tt> allows properties to
be attached to its vertices, edges, or to the graph itself by way
of its <a href="#template-parms">template parameters</a>. These
properties may be accessed via
the <a href="#property-access">member</a>
and <a href="#property-map-accessors">non-member</a> property
access functions, using the <a href="bundles.html">bundled
properties</a> scheme.</p>
<p>The CSR graph provides two kinds of built-in
properties: <tt>vertex_index</tt>, which maps from vertices to
values in <tt>[0, n)</tt> and <tt>edge_index</tt>, which maps
from edges to values in <tt>[0, m)</tt>, where <tt>n</tt>
and <tt>m</tt> are the number of vertices and edges in the graph,
respectively. </p>
<a name="member-functions"></a><h2>Member Functions</h2>
<a name="constructors"></a><h3>Constructors</h3>
<pre><a name="default-const"></a>
compressed_sparse_row_graph();
</pre>
<p class="indent">Constructs a graph with no vertices or edges.</p>
<hr></hr>
<pre><a name="edge-const"></a>
template&lt;typename InputIterator&gt;
compressed_sparse_row_graph(InputIterator edge_begin, InputIterator edge_end,
vertices_size_type numverts,
edges_size_type numedges = 0,
const GraphProperty&amp; prop = GraphProperty());
</pre>
<p class="indent">
Constructs a graph with <code>numverts</code> vertices whose
edges are specified by the iterator range <code>[edge_begin,
edge_end)</code>. The <tt>InputIterator</tt> must be a model of
<a
href="http://www.sgi.com/tech/stl/InputIterator.html">InputIterator</a>
whose <code>value_type</code> is an <code>std::pair</code> of
integer values. These integer values are the source and target
vertices for the edges, and must fall within the range <code>[0,
numverts)</code>. The edges in <code>[edge_begin,
edge_end)</code> must be sorted so that all edges originating
from vertex <i>i</i> preceed any edges originating from all
vertices <i>j</i> where <i>j &gt; i</i>.
</p>
<p class="indent">
The value <code>numedges</code>, if provided, tells how many
edges are in the range <code>[edge_begin, edge_end)</code> and
will be used to preallocate data structures to save both memory
and time during construction.
</p>
<p class="indent">
The value <code>prop</code> will be used to initialize the graph
property.
</p>
<hr></hr>
<pre><a name="edge-prop-const"></a>
template&lt;typename InputIterator, typename EdgePropertyIterator&gt;
compressed_sparse_row_graph(InputIterator edge_begin, InputIterator edge_end,
EdgePropertyIterator ep_iter,
vertices_size_type numverts,
edges_size_type numedges = 0,
const GraphProperty&amp; prop = GraphProperty());
</pre>
<p class="indent">
This constructor constructs a graph with <code>numverts</code>
vertices and the edges provided in the iterator range
<code>[edge_begin, edge_end)</code>. Its semantics are identical
to the <a href="#edge-const">edge range constructor</a>, except
that edge properties are also initialized. The type
<tt>EdgePropertyIterator</tt> must be a model of the <a
href="http://www.sgi.com/tech/stl/InputIterator.html">InputIterator</a>
concept whose <tt>value_type</tt> is convertible to
<tt>EdgeProperty</tt>. The iterator range <tt>[ep_iter, ep_ter +
m)</tt> will be used to initialize the properties on the edges
of the graph, where <tt>m</tt> is distance from
<tt>edge_begin</tt> to <tt>edge_end</tt>.
</p>
<hr></hr>
<pre><a name="#graph-const"></a>
template&lt;typename Graph, typename VertexIndexMap&gt;
compressed_sparse_row_graph(const Graph&amp; g, const VertexIndexMap&amp; vi,
vertices_size_type numverts,
edges_size_type numedges);
template&lt;typename Graph, typename VertexIndexMap&gt;
compressed_sparse_row_graph(const Graph&amp; g, const VertexIndexMap&amp; vi);
template&lt;typename Graph&gt;
explicit compressed_sparse_row_graph(const Graph&amp; g);
</pre>
<p class="indent">
Calls the <a href="#assign"><tt>assign</tt></a> function with
all of the arguments it is given.
</p>
<hr></hr>
<a name="mutators"></a><h3>Mutators</h3>
<pre><a name="assign"></a>
template&lt;typename Graph, typename VertexIndexMap&gt;
void assign(const Graph&amp; g, const VertexIndexMap&amp; vi,
vertices_size_type numverts, edges_size_type numedges);
template&lt;typename Graph, typename VertexIndexMap&gt;
void assign(const Graph&amp; g, const VertexIndexMap&amp; vi);
template&lt;typename Graph&gt;
void assign(const Graph&amp; g);
</pre>
<p class="indent">
Clears the CSR graph and builds a CSR graph in place from the
structure of another graph. The graph type <tt>Graph</tt> must
be a model of <a href="IncidenceGraph.html">IncidenceGraph</a>
and have a <tt>vertex(i, g)</tt> function that retrieves the
<i>i</i><sup>th</sup> vertex in the graph.
<br><b>Parameters</b>
<ul>
<li><tt>g</tt>: The incoming graph.</li>
<li><tt>vi</tt>: A map from vertices to indices. If not
provided, <tt>get(vertex_index, g)</tt> will be used.</li>
<li><tt>numverts</tt>: The number of vertices in the graph
<tt>g</tt>. If not provided, <tt>Graph</tt> must be a model of
<a href="VertexListGraph.html">VertexListGraph</a>.</li>
<li><tt>numedges</tt>: The number of edges in the graph
<tt>g</tt>. If not provided, <tt>Graph</tt> must be a model of
<a href="EdgeListGraph.html">EdgeListGraph</a>.</li>
</ul>
</p>
<hr></hr>
<a name="property-access"></a><h3>Property Access</h3>
<pre><a name="vertex-subscript"></a>
VertexProperty&amp; operator[](vertex_descriptor v);
const VertexProperty&amp; operator[](vertex_descriptor v) const;
</pre>
<p class="indent">
Retrieves the property value associated with vertex
<tt>v</tt>. Only valid when <tt>VertexProperty</tt> is a class
type that is not <tt>no_property</tt>.
</p>
<hr></hr>
<pre><a name="edge-subscript">
EdgeProperty&amp; operator[](edge_descriptor v);
const EdgeProperty&amp; operator[](edge_descriptor v) const;
</pre>
<p class="indent">
Retrieves the property value associated with edge
<tt>v</tt>. Only valid when <tt>EdgeProperty</tt> is a class
type that is not <tt>no_property</tt>.
</p>
<hr></hr>
<a name="non-members"></a><h2>Non-member Functions</h2>
<a name="vertex-access"></a><h3>Vertex access</h3>
<pre><a name="vertex"></a>
vertex_descriptor vertex(vertices_size_type i, const compressed_sparse_row_graph&amp;);
</pre>
<p class="indent">
Retrieves the <i>i</i><sup>th</sup> vertex in the graph in
constant time.
</p>
<hr></hr>
<a name="edge-access"></a><h3>Edge access</h3>
<pre><a name="edge_range"></a>
std::pair&lt;out_edge_iterator, out_edge_iterator&gt;
edge_range(vertex_descriptor u, vertex_descriptor v, const compressed_sparse_row_graph&amp;);
</pre>
<p class="indent">
Returns all edges from <tt>u</tt> to <tt>v</tt>. Requires time
linear in the number of edges outgoing from <tt>u</tt>.
</p>
<hr></hr>
<pre><a name="edge"></a>
std::pair&lt;edge_descriptor, bool&gt;
edge(vertex_descriptor u, vertex_descriptor v, const compressed_sparse_row_graph&amp;);
</pre>
<p class="indent">
If there exists an edge <i>(u, v)</i> in the graph, returns the
descriptor for that edge and <tt>true</tt>; otherwise, the
second value in the pair will be <tt>false</tt>. If multiple
edges exist from <tt>u</tt> to <tt>v</tt>, the first edge will
be returned; use <a href="#edge_range"><tt>edge_range</tt></a>
to retrieve all edges.
</p>
<hr></hr>
<pre><a name="edge_from_index"></a>
edge_descriptor edge_from_index(edges_size_type i, const compressed_sparse_row_graph&amp;);
</pre>
<p class="indent">
Returns the <i>i</i><sup>th</sup> edge in the graph. This
operation requires logarithmic time in the number of vertices.
</p>
<hr></hr>
<h3><a name="property-map-accessors">Property Map Accessors</a></h3>
<pre><a name="get"></a>
template&lt;typename <a href="./PropertyTag.html">PropertyTag</a>&gt;
property_map&lt;compressed_sparse_row_graph, PropertyTag&gt;::type
get(PropertyTag, compressed_sparse_row_graph&amp; g)
template&lt;typename <a href="./PropertyTag.html">PropertyTag</a>&gt;
property_map&lt;compressed_sparse_row_graph, Tag&gt;::const_type
get(PropertyTag, const compressed_sparse_row_graph&amp; g)
</pre>
<p class="indent">
Returns the property map object for the vertex property
specified by <TT>PropertyTag</TT>. The <TT>PropertyTag</TT> must
be a member pointer to access one of the fields in
<tt>VertexProperty</tt> or <tt>EdgeProperty</tt>.
</p>
<hr></hr>
<pre><a name="get-x"></a>
template&lt;typename <a href="./PropertyTag.html">PropertyTag</a>, class X&gt;
typename property_traits&lt;property_map&lt;compressed_sparse_row_graph, PropertyTag&gt;::const_type&gt::value_type
get(PropertyTag, const compressed_sparse_row_graph&amp; g, X x)
</pre>
<p class="indent">
This returns the property value for <tt>x</tt>, where <tt>x</tt>
is either a vertex or edge descriptor.
</p>
<hr></hr>
<pre><a name="put-x"></a>
template&lt;typename <a href="./PropertyTag.html">PropertyTag</a>, class X, class Value&gt;
void put(PropertyTag, const compressed_sparse_row_graph&amp; g, X x, const Value&amp; value);
</pre>
<p class="indent">
This sets the property value for <tt>x</tt> to
<tt>value</tt>. <tt>x</tt> is either a vertex or edge
descriptor. <tt>Value</tt> must be convertible to <tt>typename
property_traits&lt;property_map&lt;compressed_sparse_row_graph,
PropertyTag&gt;::type&gt::value_type</tt>
</p>
<hr></hr>
<pre><a name="get_property"></a>
template&lt;typename <a href="./PropertyTag.html#GraphPropertyTag">GraphPropertyTag</a>&gt;
typename graph_property&lt;compressed_sparse_row_graph, GraphPropertyTag&gt;::type&amp;
get_property(compressed_sparse_row_graph&amp; g, GraphPropertyTag);
template&lt;typename <a href="./PropertyTag.html#GraphPropertyTag">GraphPropertyTag</a>&gt;
typename graph_property&lt;compressed_sparse_row_graph, GraphPropertyTag&gt;::type const &amp;
get_property(const compressed_sparse_row_graph&amp; g, GraphPropertyTag);
</pre>
<p class="indent">
Return the property specified by <tt>GraphPropertyTag</tt> that
is attached to the graph object <tt>g</tt>.
</p>
<hr></hr>
<pre><a name="set_property"></a>
template&lt;typename <a href="./PropertyTag.html#GraphPropertyTag">GraphPropertyTag</a>&gt;
void set_property(const compressed_sparse_row_graph&amp; g, GraphPropertyTag,
const typename graph_property&lt;compressed_sparse_row_graph, GraphPropertyTag&gt;::type&amp; value);
</pre>
<p class="indent">
Set the property specified by <tt>GraphPropertyTag</tt> that
is attached to the graph object <tt>g</tt>.
</p>
<hr></hr>
<h3><a name="incremental-construction-functions">Incremental construction functions</a></h3>
<pre><a name="add_vertex"></a>
vertex_descriptor add_vertex(compressed_sparse_row_graph&amp; g)
</pre>
<p class="indent">
Add a new vertex to the end of the graph <tt>g</tt>, and return a
descriptor for that vertex. The new vertex will be greater than any of
the previous vertices in <tt>g</tt>.
</p>
<hr></hr>
<pre><a name="add_vertices"></a>
vertex_descriptor add_vertices(vertices_size_type count, compressed_sparse_row_graph&amp; g)
</pre>
<p class="indent">
Add <tt>count</tt> new vertices to the end of the graph <tt>g</tt>, and
return a descriptor for the smallest new vertex. The new vertices will
be greater than any of the previous vertices in <tt>g</tt>.
</p>
<hr></hr>
<pre><a name="add_edge"></a>
edge_descriptor add_edge(vertex_descriptor src, vertex_descriptor tgt, compressed_sparse_row_graph&amp; g)
</pre>
<p class="indent">
Add a new edge from <tt>src</tt> to <tt>tgt</tt> in the graph <tt>g</tt>,
and return a descriptor for it. There must not be an edge in <tt>g</tt>
whose source vertex is greater than <tt>src</tt>. If the vertex
<tt>src</tt> has out edges before this operation is called, there must be
none whose target is larger than <tt>tgt</tt>.
</p>
<hr></hr>
<a name="example"></a><h2>Example</h2>
<br>[<a
href="../example/csr-example.cpp">libs/graph/example/csr-example.cpp</a>]
<p>We will use the <tt>compressed_sparse_row_graph</tt> graph
class to store a simple Web graph. In this web graph the vertices
represent web pages and the edges represent links from one web
page to another. With each web page we want to associate a URL, so
we initially create a <tt>WebPage</tt> class that stores the
URL. Then we can create our graph type by providing
<tt>WebPage</tt> as a parameter to the
<tt>compressed_sparse_row_graph</tt> class template.</p>
<pre>
class WebPage
{
public:
std::string url;
};
// ...
typedef compressed_sparse_row_graph&lt;directedS, WebPage&gt; WebGraph;
WebGraph g(&the_edges[0], &the_edges[0] + sizeof(the_edges)/sizeof(E), 6);
</pre>
<p>We can then set the properties on the vertices of the graph
using the <a href="bundles.html">bundled properties</a> syntax,
and display the edges for the user.</p>
<pre>
// Set the URLs of each vertex
int index = 0;
BGL_FORALL_VERTICES(v, g, WebGraph)
g[v].url = urls[index++];
// Output each of the links
std::cout &lt;&lt; "The web graph:" &lt;&lt; std::endl;
BGL_FORALL_EDGES(e, g, WebGraph)
std::cout &lt;&lt; " " &lt;&lt; g[source(e, g)].url &lt;&lt; " -> " &lt;&lt; g[target(e, g)].url
&lt;&lt; std::endl;
</pre>
<p>See the <a href="../example/csr-example.cpp">complete example
source</a> for other operations one can perform with a
<tt>compressed_sparse_row_graph</tt>.</p>
<br>
<HR>
<TABLE>
<TR valign=top>
<TD nowrap>Copyright &copy; 2005</TD><TD>
<A HREF="../../../people/doug_gregor.html">Doug Gregor</A>, Indiana University (<script language="Javascript">address("cs.indiana.edu", "dgregor")</script>)<br>
Jeremiah Willcock, Indiana University (<script language="Javascript">address("osl.iu.edu", "jewillco")</script>)<br>
<A HREF=http://www.osl.iu.edu/~lums>Andrew Lumsdaine</A>,
Indiana University (<script language="Javascript">address("osl.iu.edu", "lums")</script>)
</TD></TR></TABLE>
</body>
</html>
+22 -12
View File
@@ -2,19 +2,15 @@
<!--
-- Copyright (c) Jeremy Siek 2000-2001
--
-- Permission to use, copy, modify, distribute and sell this software
-- and its documentation for any purpose is hereby granted without fee,
-- provided that the above copyright notice appears in all copies and
-- that both that copyright notice and this permission notice appear
-- in supporting documentation. Jeremy Siek makes no
-- representations about the suitability of this software for any
-- purpose. It is provided "as is" without express or implied warranty.
-- 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: Connected Components</Title>
<BODY BGCOLOR="#ffffff" LINK="#0000ee" TEXT="#000000" VLINK="#551a8b"
ALINK="#ff0000">
<IMG SRC="../../../c++boost.gif"
<IMG SRC="../../../boost.png"
ALT="C++ Boost" width="277" height="86">
<BR Clear>
@@ -22,6 +18,7 @@
<H1>
<A NAME="sec:connected-components">
<img src="figs/python.gif" alt="(Python)"/>
<TT>connected_components</TT></A>
</H1>
@@ -65,7 +62,9 @@ IN: <tt>const Graph&amp; g</tt>
<blockquote>
An undirected graph. The graph type must be a model of <a
href="VertexListGraph.html">Vertex List Graph</a> and <a
href="IncidenceGraph.html">Incidence Graph</a>.
href="IncidenceGraph.html">Incidence Graph</a>.<br>
<b>Python</b>: The parameter is named <tt>graph</tt>.
</blockquote>
OUT: <tt>ComponentMap c</tt>
@@ -78,7 +77,10 @@ recording the component number in the component property map. The
href="../../property_map/WritablePropertyMap.html">Writable Property
Map</a>. The value type shouch be an integer type, preferably the same
as the <tt>vertices_size_type</tt> of the graph. The key type must be
the graph's vertex descriptor type.
the graph's vertex descriptor type.<br>
<b>Python</b>: Must be an <tt>vertex_int_map</tt> for the graph.<br>
<b>Python default</b>: <tt>graph.get_vertex_int_map("component")</tt>
</blockquote>
<h3>Named Parameters</h3>
@@ -96,7 +98,9 @@ UTIL: <tt>color_map(ColorMap color)</tt>
</tt>iterator_property_map</tt></a> created from a
<tt>std::vector</tt> of <tt>default_color_type</tt> of size
<tt>num_vertices(g)</tt> and using the <tt>i_map</tt> for the index
map.
map.<br>
<b>Python</b>: The color map must be a <tt>vertex_color_map</tt> for
the graph.
</blockquote>
IN: <tt>vertex_index_map(VertexIndexMap i_map)</tt>
@@ -110,7 +114,13 @@ IN: <tt>vertex_index_map(VertexIndexMap i_map)</tt>
vertex descriptor type of the graph needs to be usable as the key
type of the map.<br>
<b>Default:</b> <tt>get(vertex_index, g)</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
not have an internal <tt>vertex_index</tt> property.<br>
<b>Python</b>: Unsupported parameter.
</blockquote>
+4 -8
View File
@@ -2,19 +2,15 @@
<!--
-- Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 2000
--
-- Permission to use, copy, modify, distribute and sell this software
-- and its documentation for any purpose is hereby granted without fee,
-- provided that the above copyright notice appears in all copies and
-- that both that copyright notice and this permission notice appear
-- in supporting documentation. Silicon Graphics makes no
-- representations about the suitability of this software for any
-- purpose. It is provided "as is" without express or implied warranty.
-- 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: Constructing Graph Algorithms</Title>
<BODY BGCOLOR="#ffffff" LINK="#0000ee" TEXT="#000000" VLINK="#551a8b"
ALINK="#ff0000">
<IMG SRC="../../../c++boost.gif"
<IMG SRC="../../../boost.png"
ALT="C++ Boost" width="277" height="86">
<BR Clear>
+10 -10
View File
@@ -2,19 +2,15 @@
<!--
-- Copyright (c) Jeremy Siek 2000
--
-- Permission to use, copy, modify, distribute and sell this software
-- and its documentation for any purpose is hereby granted without fee,
-- provided that the above copyright notice appears in all copies and
-- that both that copyright notice and this permission notice appear
-- in supporting documentation. Jeremy Siek makes no
-- representations about the suitability of this software for any
-- purpose. It is provided "as is" without express or implied warranty.
-- 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: Copy Graph</Title>
<BODY BGCOLOR="#ffffff" LINK="#0000ee" TEXT="#000000" VLINK="#551a8b"
ALINK="#ff0000">
<IMG SRC="../../../c++boost.gif"
<IMG SRC="../../../boost.png"
ALT="C++ Boost" width="277" height="86">
<BR Clear>
@@ -79,9 +75,13 @@ IN: <tt>vertex_index_map(VertexIndexMap i_map)</tt>
The vertex index map type must be a model of <a
href="../../property_map/ReadablePropertyMap.html">Readable Property
Map</a> and must map the vertex descriptors of <tt>G</tt> to the
integers from 0 to <tt>num_vertices(G)</tt>.<br>
integers in the half-open range <tt>[0,num_vertices(G))</tt>.<br>
<b>Default:</b> <tt>get(vertex_index, G)</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
not have an internal <tt>vertex_index</tt> property.
</blockquote>
+100 -35
View File
@@ -1,25 +1,23 @@
<HTML>
<!--
-- Copyright (c) Jeremy Siek 2000
--
-- Permission to use, copy, modify, distribute and sell this software
-- and its documentation for any purpose is hereby granted without fee,
-- provided that the above copyright notice appears in all copies and
-- that both that copyright notice and this permission notice appear
-- in supporting documentation. Silicon Graphics makes no
-- representations about the suitability of this software for any
-- purpose. It is provided "as is" without express or implied warranty.
-->
<Head>
<!-- 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: Cuthill-Mckee Ordering</Title>
</Head>
<BODY BGCOLOR="#ffffff" LINK="#0000ee" TEXT="#000000" VLINK="#551a8b"
ALINK="#ff0000">
<IMG SRC="../../../c++boost.gif"
<IMG SRC="../../../boost.png"
ALT="C++ Boost" width="277" height="86">
<BR Clear>
<H1><A NAME="sec:bfs">
<H1>
<img src="figs/python.gif" alt="(Python)"/>
<TT>cuthill_mckee_ordering</TT>
</H1>
@@ -34,7 +32,7 @@
<TD ALIGN="LEFT">color, degree</TD>
</TR>
<TR><TH ALIGN="LEFT"><B>Complexity:</B></TH>
<TD ALIGN="LEFT">time: <i>O(log(m)|E|)</i> where <i>m = max { degree(v) | v in V }</i> </TD>
<TD ALIGN="LEFT">time: <i>O(m log(m)|V|)</i> where <i>m = max { degree(v) | v in V }</i> </TD>
</TR>
</TABLE>
</DIV>
@@ -44,17 +42,36 @@
(1)
template &lt;class IncidenceGraph, class OutputIterator,
class ColorMap, class DegreeMap&gt;
void
cuthill_mckee_ordering(IncidenceGraph&amp; g,
OutputIterator
cuthill_mckee_ordering(const IncidenceGraph&amp; g,
typename graph_traits&lt;Graph&gt;::vertex_descriptor s,
OutputIterator inverse_permutation,
ColorMap color, DegreeMap degree)
(2)
template &lt;class VertexListGraph, class OutputIterator&gt;
OutputIterator
cuthill_mckee_ordering(const VertexIndexMap&amp; G, OutputIterator inverse_permutation);
template &lt;class VertexListGraph, class OutputIterator, class VertexIndexMap&gt;
OutputIterator
cuthill_mckee_ordering(const VertexIndexMap&amp; G, OutputIterator inverse_permutation,
VertexIndexMap index_map);
template &lt;class VertexListGraph, class OutputIterator,
class ColorMap, class DegreeMap&gt;
void
cuthill_mckee_ordering(VertexListGraph&amp; G, OutputIterator inverse_permutation,
OutputIterator
cuthill_mckee_ordering(const VertexListGraph&amp; G, OutputIterator inverse_permutation,
ColorMap color, DegreeMap degree)
(3)
template &lt;class IncidenceGraph, class OutputIterator,
class ColorMap, class DegreeMap&gt;
OutputIterator
cuthill_mckee_ordering(const IncidenceGraph&amp; g,
std::deque&lt; typename
graph_traits&lt;Graph&gt;::vertex_descriptor &gt; vertex_queue,
OutputIterator inverse_permutation,
ColorMap color, DegreeMap degree)
</pre>
@@ -62,7 +79,7 @@ The goal of the Cuthill-Mckee (and reverse Cuthill-Mckee) ordering
algorithm[<A
HREF="bibliography.html#george81:__sparse_pos_def">14</A>, <A
HREF="bibliography.html#cuthill69:reducing_bandwith">43</A>, <a
href="bibliography.html#liu75:rcm">44</a>, <a
href="bibliography.html#liu75:anal_cm_rcm">44</a>, <a
href="bibliography.html#george71:fem">45</a> ] is to reduce the <a
href="./bandwidth.html">bandwidth</a> of a graph by reordering the
indices assigned to each vertex. The Cuthill-Mckee ordering algorithm
@@ -73,9 +90,13 @@ increasing degree.
<p>
Version 1 of the algorithm lets the user choose the ``starting
vertex'' whereas version 2 finds a good starting vertex using the
pseudo-peripheral pair heuristic. The choice of the ``starting
vertex'' can have a significant effect on the quality of the ordering.
vertex'', version 2 finds a good starting vertex using the
pseudo-peripheral pair heuristic (among each component), while version 3
contains the starting nodes for each vertex in the deque. The choice of the
``starting vertex'' can have a significant effect on the quality of the
ordering. For versions 2 and 3, <tt>find_starting_vertex</tt> will be called
for each component in the graph, increasing run time significantly.
</p>
<p>
The output of the algorithm are the vertices in the new ordering.
@@ -83,15 +104,17 @@ Depending on what kind of output iterator you use, you can get either
the Cuthill-Mckee ordering or the reverse Cuthill-McKee ordering. For
example, if you store the output into a vector using the vector's
reverse iterator, then you get the reverse Cuthill-McKee ordering.
</p>
<pre>
std::vector&lt;vertex_descriptor&gt; inv_perm(num_vertices(G));
cuthill_mckee_ordering(G, inv_perm.rbegin());
cuthill_mckee_ordering(G, inv_perm.rbegin(), ...);
</pre>
<p>
Either way, storing the output into a vector gives you the
permutation from the new ordering to the old ordering.
</p>
<pre>
inv_perm[new_index[u]] == u
@@ -101,6 +124,7 @@ permutation from the new ordering to the old ordering.
Often times, it is the opposite permutation that you want, the
permutation from the old index to the new index. This can easily be
computed in the following way.
</p>
<pre>
for (size_type i = 0; i != inv_perm.size(); ++i)
@@ -117,23 +141,28 @@ For version 1:
<li> <tt>IncidenceGraph&amp; g</tt> &nbsp;(IN) <br>
An undirected graph. The graph's type must be a model of <a
href="./IncidenceGraph.html">IncidenceGraph</a>.
href="./IncidenceGraph.html">IncidenceGraph</a>.<br>
<b>Python</b>: The parameter is named <tt>graph</tt>.
<li> <tt>vertex_descriptor s</tt> &nbsp(IN) <br>
The starting vertex.
The starting vertex.<br>
<b>Python</b>: Unsupported parameter.
<li> <tt>OutputIterator inverse_permutation</tt> &nbsp(OUT) <br>
The new vertex ordering. The vertices are written to the <a
href="http://www.sgi.com/tech/stl/OutputIterator.html">output
iterator</a> in their new order.
iterator</a> in their new order.<br>
<b>Python</b>: This parameter is unused in Python. The new vertex
ordering is returned as a Python <tt>list</tt>.
<li> <tt>ColorMap color_map</tt> &nbsp(WORK) <br>
Used internally to keep track of the progress of the algorithm
(to avoid visiting the same vertex twice).
(to avoid visiting the same vertex twice).<br>
<b>Python</b>: Unsupported parameter.
<li> <tt>DegreeMap degree_map</tt> &nbsp(IN) <br>
This must map vertices to their degree.
This must map vertices to their degree.<br>
<b>Python</b>: Unsupported parameter.
</ul>
@@ -143,23 +172,59 @@ For version 2:
<li> <tt>VertexListGraph&amp; g</tt> &nbsp;(IN) <br>
An undirected graph. The graph's type must be a model of <a
href="./VertexListGraph.html">VertexListGraph</a>.
href="./VertexListGraph.html">VertexListGraph</a>.<br>
<b>Python</b>: The parameter is named <tt>graph</tt>.
<li> <tt><a href="http://www.sgi.com/tech/stl/OutputIterator.html">
OutputIterator</a> inverse_permutation</tt> &nbsp(OUT) <br>
The new vertex ordering. The vertices are written to the
output iterator in their new order.
output iterator in their new order.<br>
<b>Python</b>: This parameter is unused in Python. The new vertex
ordering is returned as a Python <tt>list</tt>.
<li> <tt>ColorMap color_map</tt> &nbsp(WORK) <br>
Used internally to keep track of the progress of the algorithm
(to avoid visiting the same vertex twice).
(to avoid visiting the same vertex twice).<br>
<b>Python</b>: Unsupported parameter.
<li> <tt>DegreeMap degree_map</tt> &nbsp(IN) <br>
This must map vertices to their degree.
This must map vertices to their degree.<br>
<b>Python</b>: Unsupported parameter.
</ul>
For version 3:
<ul>
<li> <tt>IncidenceGraph&amp; g</tt> &nbsp;(IN) <br>
An undirected graph. The graph's type must be a model of <a
href="./IncidenceGraph.html">IncidenceGraph</a>.<br>
<b>Python</b>: The parameter is named <tt>graph</tt>.
<li> <tt> std::deque&lt; typename graph_traits&lt;Graph&gt;::vertex_descriptor &gt; vertex_queue </tt> &nbsp(IN) <br>
The deque containing the starting vertices for each component.<br>
<b>Python</b>: Unsupported parameter.
<li> <tt>OutputIterator inverse_permutation</tt> &nbsp(OUT) <br>
The new vertex ordering. The vertices are written to the <a
href="http://www.sgi.com/tech/stl/OutputIterator.html">output
iterator</a> in their new order.<br>
<b>Python</b>: This parameter is unused in Python. The new vertex
ordering is returned as a Python <tt>list</tt>.
<li> <tt>ColorMap color_map</tt> &nbsp(WORK) <br>
Used internally to keep track of the progress of the algorithm
(to avoid visiting the same vertex twice).<br>
<b>Python</b>: Unsupported parameter.
<li> <tt>DegreeMap degree_map</tt> &nbsp(IN) <br>
This must map vertices to their degree.<br>
<b>Python</b>: Unsupported parameter.
</ul>
<h3>Example</h3>
See <a
+51 -21
View File
@@ -2,24 +2,21 @@
<!--
-- Copyright (c) Jeremy Siek 2000
--
-- Permission to use, copy, modify, distribute and sell this software
-- and its documentation for any purpose is hereby granted without fee,
-- provided that the above copyright notice appears in all copies and
-- that both that copyright notice and this permission notice appear
-- in supporting documentation. Jeremy Siek makes no
-- representations about the suitability of this software for any
-- purpose. It is provided "as is" without express or implied warranty.
-- 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: Directed Acyclic Graph Shortest Paths</Title>
<BODY BGCOLOR="#ffffff" LINK="#0000ee" TEXT="#000000" VLINK="#551a8b"
ALINK="#ff0000">
<IMG SRC="../../../c++boost.gif"
<IMG SRC="../../../boost.png"
ALT="C++ Boost" width="277" height="86">
<BR Clear>
<H1><A NAME="sec:dag_shortest_paths"></A>
<img src="figs/python.gif" alt="(Python)"/>
<TT>dag_shortest_paths</TT>
</H1>
@@ -53,7 +50,7 @@ than either the Dijkstra or Bellman-Ford algorithm.
Use breadth-first search instead of this algorithm
when all edge weights are equal to one. For the definition of the
shortest-path problem see Section <A
HREF="graph_theory_review.html#sec:shortest-path-algorithms">Shortest-Paths
HREF="graph_theory_review.html#sec:shortest-paths-algorithms">Shortest-Paths
Algorithms</A> for some background to the shortest-path problem.
</P>
@@ -80,13 +77,17 @@ algorithm's event points.</P>
IN: <tt>const VertexListGraph&amp; g</tt>
<blockquote>
The graph object on which the algorithm will be applied.
The type <tt>VertexListGraph</tt> must be a model of \concept{VertexListGraph}.
The type <tt>VertexListGraph</tt> must be a model of \concept{VertexListGraph}.<br>
<b>Python</b>: The parameter is named <tt>graph</tt>.
</blockquote>
IN: <tt>vertex_descriptor s</tt>
<blockquote>
The source vertex. All distance will be calculated from this vertex,
and the shortest paths tree will be rooted at this vertex.
and the shortest paths tree will be rooted at this vertex.<br>
<b>Python</b>: The parameter is named <tt>root_vertex</tt>.
</blockquote>
<h3>Named Parameters</h3>
@@ -99,7 +100,10 @@ IN: <tt>weight_map(WeightMap w_map)</tt>
the graph needs to be usable as the key type for the weight
map. The value type for the map must be
<i>Addable</i> with the value type of the distance map.<br>
<b>Default:</b> <tt>get(edge_weight, g)</tt>
<b>Default:</b> <tt>get(edge_weight, g)</tt><br>
<b>Python</b>: Must be an <tt>edge_double_map</tt> for the graph.<br>
<b>Python default</b>: <tt>graph.get_edge_double_map("weight")</tt>
</blockquote>
IN: <tt>vertex_index_map(VertexIndexMap i_map)</tt>
@@ -111,7 +115,13 @@ IN: <tt>vertex_index_map(VertexIndexMap i_map)</tt>
<a href="../../property_map/ReadablePropertyMap.html">Readable Property Map</a>. The value type of the map must be an
integer type. The vertex descriptor type of the graph needs to be
usable as the key type of the map.<br>
<b>Default:</b> <tt>get(vertex_index, g)</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
not have an internal <tt>vertex_index</tt> property.<br>
<b>Python</b>: Unsupported parameter.
</blockquote>
OUT: <tt>predecessor_map(PredecessorMap p_map)</tt>
@@ -125,7 +135,8 @@ OUT: <tt>predecessor_map(PredecessorMap p_map)</tt>
href="../../property_map/ReadWritePropertyMap.html">Read/Write
Property Map</a> which key and vertex types the same as the vertex
descriptor type of the graph.<br>
<b>Default:</b> <tt>dummy_property_map</tt>
<b>Default:</b> <tt>dummy_property_map</tt><br>
<b>Python</b>: Must be a <tt>vertex_vertex_map</tt> for the graph.<br>
</blockquote>
UTIL/OUT: <tt>distance_map(DistanceMap d_map)</tt>
@@ -150,7 +161,9 @@ UTIL/OUT: <tt>distance_map(DistanceMap d_map)</tt>
<tt>iterator_property_map</tt></a> created from a
<tt>std::vector</tt> of the <tt>WeightMap</tt>'s value type of size
<tt>num_vertices(g)</tt> and using the <tt>i_map</tt> for the index
map.
map.<br>
<b>Python</b>: Must be a <tt>vertex_double_map</tt> for the graph.
</blockquote>
IN: <tt>distance_compare(CompareFunction cmp)</tt>
@@ -164,7 +177,9 @@ IN: <tt>distance_compare(CompareFunction cmp)</tt>
<b>Default:</b>
<tt>std::less&lt;D&gt;</tt> with <tt>D=typename
property_traits&lt;DistanceMap&gt;::value_type</tt>
property_traits&lt;DistanceMap&gt;::value_type</tt><br>
<b>Python</b>: Unsupported parameter.
</blockquote>
IN: <tt>distance_combine(CombineFunction cmb)</tt>
@@ -179,7 +194,9 @@ IN: <tt>distance_combine(CombineFunction cmb)</tt>
type as the distance value type.<br>
<b>Default:</b> <tt>std::plus&lt;D&gt;</tt> with
<tt>D=typename property_traits&lt;DistanceMap&gt;::value_type</tt>
<tt>D=typename property_traits&lt;DistanceMap&gt;::value_type</tt><br>
<b>Python</b>: Unsupported parameter.
</blockquote>
IN: <tt>distance_inf(D inf)</tt>
@@ -187,7 +204,9 @@ IN: <tt>distance_inf(D inf)</tt>
The <tt>inf</tt> object must be the greatest value of any <tt>D</tt> object.
That is, <tt>compare(d, inf) == true</tt> for any <tt>d != inf</tt>.
The type <tt>D</tt> is the value type of the <tt>DistanceMap</tt>.<br>
<b>Default:</b> <tt>std::numeric_limits&lt;D&gt;::max()</tt>
<b>Default:</b> <tt>std::numeric_limits&lt;D&gt;::max()</tt><br>
<b>Python</b>: Unsupported parameter.
</blockquote>
IN: <tt>distance_zero(D zero)</tt>
@@ -196,7 +215,9 @@ IN: <tt>distance_zero(D zero)</tt>
<a href="./Monoid.html">Monoid</a> formed by the distance values
and the <tt>combine</tt> function object.
The type \code{D} is the value type of the \code{DistanceMap}
<b>Default:</b> <tt>D()</tt>
<b>Default:</b> <tt>D()</tt><br>
<b>Python</b>: Unsupported parameter.
</blockquote>
UTIL/OUT: <tt>color_map(ColorMap c_map)</tt>
@@ -215,7 +236,11 @@ UTIL/OUT: <tt>color_map(ColorMap c_map)</tt>
href="../../property_map/iterator_property_map.html">
<tt>iterator_property_map</tt></a> created from a <tt>std::vector</tt>
of <tt>default_color_type</tt> of size <tt>num_vertices(g)</tt> and
using the <tt>i_map</tt> for the index map.
using the <tt>i_map</tt> for the index map.<br>
<b>Python</b>: The color map must be a <tt>vertex_color_map</tt> for
the graph.
</blockquote>
OUT: <tt>visitor(DijkstraVisitor v)</tt>
@@ -226,7 +251,12 @@ OUT: <tt>visitor(DijkstraVisitor v)</tt>
<a href="./DijkstraVisitor.html">Dijkstra Visitor</a> concept.
The visitor object is passed by value <a
href="#1">[1]</a>.<br>
<b>Default:</b> <tt>dijkstra_visitor&lt;null_visitor&gt;</tt>
<b>Default:</b> <tt>dijkstra_visitor&lt;null_visitor&gt;</tt><br>
<b>Python</b>: The parameter should be an object that derives from
the <a
href="DijkstraVisitor.html#python"><tt>DijkstraVisitor</tt></a> type
of the graph.
</blockquote>
+231
View File
@@ -0,0 +1,231 @@
/*
:Author: David Goodger
:Contact: goodger@users.sourceforge.net
:date: $Date$
:version: $Revision$
:copyright: This stylesheet has been placed in the public domain.
Default cascading style sheet for the HTML output of Docutils.
-- Copyright (c) 2005 Trustees of Indiana University
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)
*/
.first {
margin-top: 0 }
.last {
margin-bottom: 0 }
a.toc-backref {
text-decoration: none ;
color: black }
dd {
margin-bottom: 0.5em }
div.abstract {
margin: 2em 5em }
div.abstract p.topic-title {
font-weight: bold ;
text-align: center }
div.attention, div.caution, div.danger, div.error, div.hint,
div.important, div.note, div.tip, div.warning, div.admonition {
margin: 2em ;
border: medium outset ;
padding: 1em }
div.attention p.admonition-title, div.caution p.admonition-title,
div.danger p.admonition-title, div.error p.admonition-title,
div.warning p.admonition-title {
color: red ;
font-weight: bold ;
font-family: sans-serif }
div.hint p.admonition-title, div.important p.admonition-title,
div.note p.admonition-title, div.tip p.admonition-title,
div.admonition p.admonition-title {
font-weight: bold ;
font-family: sans-serif }
div.dedication {
margin: 2em 5em ;
text-align: center ;
font-style: italic }
div.dedication p.topic-title {
font-weight: bold ;
font-style: normal }
div.figure {
margin-left: 2em }
div.footer, div.header {
font-size: smaller }
div.sidebar {
margin-left: 1em ;
border: medium outset ;
padding: 0em 1em ;
background-color: #ffffee ;
width: 40% ;
float: right ;
clear: right }
div.sidebar p.rubric {
font-family: sans-serif ;
font-size: medium }
div.system-messages {
margin: 5em }
div.system-messages h1 {
color: red }
div.system-message {
border: medium outset ;
padding: 1em }
div.system-message p.system-message-title {
color: red ;
font-weight: bold }
div.topic {
margin: 2em }
h1.title {
text-align: center }
h2.subtitle {
text-align: center }
hr {
width: 75% }
ol.simple, ul.simple {
margin-bottom: 1em }
ol.arabic {
list-style: decimal }
ol.loweralpha {
list-style: lower-alpha }
ol.upperalpha {
list-style: upper-alpha }
ol.lowerroman {
list-style: lower-roman }
ol.upperroman {
list-style: upper-roman }
p.attribution {
text-align: right ;
margin-left: 50% }
p.caption {
font-style: italic }
p.credits {
font-style: italic ;
font-size: smaller }
p.label {
white-space: nowrap }
p.rubric {
font-weight: bold ;
font-size: larger ;
color: maroon ;
text-align: center }
p.sidebar-title {
font-family: sans-serif ;
font-weight: bold ;
font-size: larger }
p.sidebar-subtitle {
font-family: sans-serif ;
font-weight: bold }
p.topic-title {
font-weight: bold }
pre.address {
margin-bottom: 0 ;
margin-top: 0 ;
font-family: serif ;
font-size: 100% }
pre.line-block {
font-family: serif ;
font-size: 100% }
pre.literal-block, pre.doctest-block {
margin-left: 2em ;
margin-right: 2em ;
background-color: #eeeeee }
span.classifier {
font-family: sans-serif ;
font-style: oblique }
span.classifier-delimiter {
font-family: sans-serif ;
font-weight: bold }
span.interpreted {
font-family: sans-serif }
span.option {
white-space: nowrap }
span.option-argument {
font-style: italic }
span.pre {
white-space: pre }
span.problematic {
color: red }
table {
margin-top: 0.5em ;
margin-bottom: 0.5em }
table.citation {
border-left: solid thin gray ;
padding-left: 0.5ex }
table.docinfo {
margin: 2em 4em }
table.footnote {
border-left: solid thin black ;
padding-left: 0.5ex }
td, th {
padding-left: 0.5em ;
padding-right: 0.5em ;
vertical-align: top }
th.docinfo-name, th.field-name {
font-weight: bold ;
text-align: left ;
white-space: nowrap }
h1 tt, h2 tt, h3 tt, h4 tt, h5 tt, h6 tt {
font-size: 100% }
tt {
background-color: #eeeeee }
ul.auto-toc {
list-style-type: none }
+25 -14
View File
@@ -2,24 +2,20 @@
<!--
-- Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 2000
--
-- Permission to use, copy, modify, distribute and sell this software
-- and its documentation for any purpose is hereby granted without fee,
-- provided that the above copyright notice appears in all copies and
-- that both that copyright notice and this permission notice appear
-- in supporting documentation. We make no
-- representations about the suitability of this software for any
-- purpose. It is provided "as is" without express or implied warranty.
-- 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: Depth-First Search</Title>
<BODY BGCOLOR="#ffffff" LINK="#0000ee" TEXT="#000000" VLINK="#551a8b"
ALINK="#ff0000">
<IMG SRC="../../../c++boost.gif"
<IMG SRC="../../../boost.png"
ALT="C++ Boost" width="277" height="86">
<BR Clear>
<H1><A NAME="sec:depth-first-search"></A>
<H1><A NAME="sec:depth-first-search"></A><img src="figs/python.gif" alt="(Python)"/>
<TT>depth_first_search</TT>
</H1>
@@ -164,7 +160,9 @@ IN: <tt>Graph&amp; g</tt>
<blockquote>
A directed graph. The graph type must
be a model of <a href="./IncidenceGraph.html">Incidence Graph</a>
and <a href="./VertexListGraph.html">Vertex List Graph</a>.
and <a href="./VertexListGraph.html">Vertex List Graph</a>.<br>
<b>Python</b>: The parameter is named <tt>graph</tt>.
</blockquote>
@@ -176,7 +174,11 @@ IN: <tt>visitor(DFSVisitor vis)</tt>
event-points specified by the <a href="./DFSVisitor.html">DFS
Visitor</a> concept. The visitor object is passed by value <a
href="#1">[1]</a>. <br> <b>Default:</b>
<tt>dfs_visitor&lt;null_visitor&gt;</tt>
<tt>dfs_visitor&lt;null_visitor&gt;</tt><br>
<b>Python</b>: The parameter should be an object that derives from
the <a href="DFSVisitor.html#python"><tt>DFSVisitor</tt></a> type of
the graph.
</blockquote>
UTIL/OUT: <tt>color_map(ColorMap color)</tt>
@@ -192,7 +194,10 @@ UTIL/OUT: <tt>color_map(ColorMap color)</tt>
</tt>iterator_property_map</tt></a> created from a
<tt>std::vector</tt> of <tt>default_color_type</tt> of size
<tt>num_vertices(g)</tt> and using the <tt>i_map</tt> for the index
map.
map.<br>
<b>Python</b>: The color map must be a <tt>vertex_color_map</tt> for
the graph.
</blockquote>
IN: <tt>root_vertex(typename
@@ -201,7 +206,7 @@ graph_traits&lt;VertexListGraph&gt;::vertex_descriptor start)</tt>
This specifies the vertex that the depth-first search should
originate from. The type is the type of a vertex descriptor for the
given graph.<br>
<b>Default:</b> <tt>*vertices(g).first</tt>
<b>Default:</b> <tt>*vertices(g).first</tt><br>
</blockquote>
IN: <tt>vertex_index_map(VertexIndexMap i_map)</tt>
@@ -215,7 +220,13 @@ IN: <tt>vertex_index_map(VertexIndexMap i_map)</tt>
vertex descriptor type of the graph needs to be usable as the key
type of the map.<br>
<b>Default:</b> <tt>get(vertex_index, g)</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
not have an internal <tt>vertex_index</tt> property.<br>
<b>Python</b>: Unsupported parameter.
</blockquote>
<P>
+32 -24
View File
@@ -2,36 +2,33 @@
<!--
-- Copyright (c) Jeremy Siek 2000
--
-- Permission to use, copy, modify, distribute and sell this software
-- and its documentation for any purpose is hereby granted without fee,
-- provided that the above copyright notice appears in all copies and
-- that both that copyright notice and this permission notice appear
-- in supporting documentation. Silicon Graphics makes no
-- representations about the suitability of this software for any
-- purpose. It is provided "as is" without express or implied warranty.
-- 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: Depth-First Visit</Title>
<BODY BGCOLOR="#ffffff" LINK="#0000ee" TEXT="#000000" VLINK="#551a8b"
ALINK="#ff0000">
<IMG SRC="../../../c++boost.gif"
<IMG SRC="../../../boost.png"
ALT="C++ Boost" width="277" height="86">
<BR Clear>
<H2><A NAME="sec:dfs"></A>
<img src="figs/python.gif" alt="(Python)"/>
<TT>depth_first_visit</TT>
</H2>
<P>
<PRE>
template &lt;class <a href="./IncidenceGraph.html">IncidenceGraph</a>, class <a href="./DFSVisitor.html">DFSVisitor</a>, class <a href="#ColorMap">ColorMap</a>&gt;
template &lt;class <a href="./IncidenceGraph.html">IncidenceGraph</a>, class <a href="./DFSVisitor.html">DFSVisitor</a>, class ColorMap&gt;
void depth_first_visit(IncidenceGraph& g,
typename graph_traits&lt;IncidenceGraph&gt;::vertex_descriptor s,
DFSVisitor&amp; vis, ColorMap color)
template &lt;class <a href="./IncidenceGraph.html">IncidenceGraph</a>, class <a href="./DFSVisitor.html">DFSVisitor</a>, class <a href="#ColorMap">ColorMap</a>,
template &lt;class <a href="./IncidenceGraph.html">IncidenceGraph</a>, class <a href="./DFSVisitor.html">DFSVisitor</a>, class ColorMap,
class TerminatorFunc&gt;
void depth_first_visit(IncidenceGraph& g,
typename graph_traits&lt;IncidenceGraph&gt;::vertex_descriptor s,
@@ -54,16 +51,6 @@ actions are taken at each event-point within the algorithm.
The <tt>ColorMap</tt> is used by the algorithm to keep track
of which vertices have been visited.
<p>
The <tt>func</tt> parameter for the second variant of the algorithm is used to
prevent the search to proceed past some vertices. It should be functional
object callable with two parameters - the descriptor of vertex and the
graph instance - and returing bool.
<p>The call is made immediately after call to 'discover_vertex' visitor
event. If <tt>true</tt> is returned, the out edges of the vertex are not
examined, as if they don't exist.
<p>The second variant can be used, for example, to find all marked vertices
reachable from a start vertex by a path which does not contain any another
marked vertices.
@@ -81,12 +68,16 @@ marked vertices.
IN <tt>IncidenceGraph&amp; g</tt>
<blockquote>
A directed or undirected graph. The graph's type must be a model of
<a href="./IncidenceGraph.html">Incidence Graph</a>.
<a href="./IncidenceGraph.html">Incidence Graph</a>.<br>
<b>Python</b>: The parameter is named <tt>graph</tt>.
</blockquote>
IN: <tt>vertex_descriptor s</tt>
<blockquote>
The source vertex from which to start the search.
The source vertex from which to start the search.<br>
<b>Python</b>: The parameter is named <tt>root_vertex</tt>.
</blockquote>
IN: <tt>DFSVisitor visitor</tt>
@@ -94,7 +85,11 @@ IN: <tt>DFSVisitor visitor</tt>
A visitor object that is invoked inside the algorithm at the
event-points specified by the <a href="./DFSVisitor.html">DFS
Visitor</a> concept. The visitor object is passed by value <a
href="#1">[1]</a>.
href="#1">[1]</a>.<br>
<b>Python</b>: The parameter should be an object that derives from
the <a href="DFSVisitor.html#python"><tt>DFSVisitor</tt></a> type of
the graph.
</blockquote>
UTIL: <tt>ColorMap color</tt>
@@ -104,9 +99,22 @@ UTIL: <tt>ColorMap color</tt>
href="../../property_map/ReadWritePropertyMap.html">Read/Write
Property Map</a> and its key type must be the graph's vertex
descriptor type and the value type of the color map map must model
<a href="./ColorValue.html">Color Value</a>.
<a href="./ColorValue.html">Color Value</a>.<br>
<b>Python</b>: The color map must be a <tt>vertex_color_map</tt> for
the graph.
</blockquote>
IN: <tt>TerminatorFunc func</tt>
<blockquote>
A function object callable with two parameters - the descriptor of
vertex and the graph instance - and returning bool. The call is made
immediately after call to 'discover_vertex' visitor
event. If <tt>true</tt> is returned, the out edges of the vertex are
not examined, as if they don't exist.<br>
<b>Python</b>: Unsupported parameter.
</blockquote>
<P>
<h3>Complexity</h3>
+4 -8
View File
@@ -2,19 +2,15 @@
<!--
-- Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 2000
--
-- Permission to use, copy, modify, distribute and sell this software
-- and its documentation for any purpose is hereby granted without fee,
-- provided that the above copyright notice appears in all copies and
-- that both that copyright notice and this permission notice appear
-- in supporting documentation. We make no
-- representations about the suitability of this software for any
-- purpose. It is provided "as is" without express or implied warranty.
-- 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: dfs_visitor</Title>
<BODY BGCOLOR="#ffffff" LINK="#0000ee" TEXT="#000000" VLINK="#551a8b"
ALINK="#ff0000">
<IMG SRC="../../../c++boost.gif"
<IMG SRC="../../../boost.png"
ALT="C++ Boost" width="277" height="86">
<BR Clear>
+59 -27
View File
@@ -2,24 +2,20 @@
<!--
-- Copyright (c) Jeremy Siek 2000
--
-- Permission to use, copy, modify, distribute and sell this software
-- and its documentation for any purpose is hereby granted without fee,
-- provided that the above copyright notice appears in all copies and
-- that both that copyright notice and this permission notice appear
-- in supporting documentation. Jeremy Siek makes no
-- representations about the suitability of this software for any
-- purpose. It is provided "as is" without express or implied warranty.
-- 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: Dijkstra's Shortest Paths</Title>
<BODY BGCOLOR="#ffffff" LINK="#0000ee" TEXT="#000000" VLINK="#551a8b"
ALINK="#ff0000">
<IMG SRC="../../../c++boost.gif"
<IMG SRC="../../../boost.png"
ALT="C++ Boost" width="277" height="86">
<BR Clear>
<H1><A NAME="sec:dijkstra"></A>
<H1><A NAME="sec:dijkstra"></A><img src="figs/python.gif" alt="(Python)"/>
<TT>dijkstra_shortest_paths</TT>
</H1>
@@ -37,14 +33,14 @@ dijkstra_shortest_paths(Graph&amp; g,
template &lt;typename Graph, typename <a href="DijkstraVisitor.html">DijkstraVisitor</a>,
typename PredecessorMap, typename DistanceMap,
typename WeightMap, typename VertexIndexMap, typename <a href="http://www.sgi.com/tech/stl/BinaryPredicate.html">CompareFunction</a>, typename <a href="http://www.sgi.com/tech/stl/BinaryFunction.html">CombineFunction</a>,
typename DistInf, typename DistZero&gt;
typename DistInf, typename DistZero, typename ColorMap = <i>default</i>&gt;
void dijkstra_shortest_paths
(const Graph&amp; g,
typename graph_traits&lt;Graph&gt;::vertex_descriptor s,
PredecessorMap predecessor, DistanceMap distance, WeightMap weight,
VertexIndexMap index_map,
CompareFunction compare, CombineFunction combine, DistInf inf, DistZero zero,
DijkstraVisitor vis)
DijkstraVisitor vis, ColorMap color = <i>default</i>)
</PRE>
<P>
@@ -56,7 +52,7 @@ algorithm for the case when some edge weights are negative. Use
breadth-first search instead of Dijkstra's algorithm when all edge
weights are equal to one. For the definition of the shortest-path
problem see Section <A
HREF="graph_theory_review.html#sec:shortest-path-algorithms">Shortest-Paths
HREF="graph_theory_review.html#sec:shortest-paths-algorithms">Shortest-Paths
Algorithms</A> for some background to the shortest-path problem.
</P>
@@ -184,13 +180,17 @@ IN: <tt>const Graph&amp; g</tt>
The graph object on which the algorithm will be applied.
The type <tt>Graph</tt> must be a model of
<a href="./VertexListGraph.html">Vertex List Graph</a>
and <a href="./IncidenceGraph.html">Incidence Graph</a>.
and <a href="./IncidenceGraph.html">Incidence Graph</a>.<br>
<b>Python</b>: The parameter is named <tt>graph</tt>.
</blockquote>
IN: <tt>vertex_descriptor s</tt>
<blockquote>
The source vertex. All distance will be calculated from this vertex,
and the shortest paths tree will be rooted at this vertex.
and the shortest paths tree will be rooted at this vertex.<br>
<b>Python</b>: The parameter is named <tt>root_vertex</tt>.
</blockquote>
<h3>Named Parameters</h3>
@@ -206,19 +206,31 @@ IN: <tt>weight_map(WeightMap w_map)</tt>
the graph needs to be usable as the key type for the weight
map. The value type for this map must be
the same as the value type of the distance map.<br>
<b>Default:</b> <tt>get(edge_weight, g)</tt>
<b>Default:</b> <tt>get(edge_weight, g)</tt><br>
<b>Python</b>: Must be an <tt>edge_double_map</tt> for the graph.<br>
<b>Python default</b>: <tt>graph.get_edge_double_map("weight")</tt>
</blockquote>
IN: <tt>vertex_index_map(VertexIndexMap i_map)</tt>
<blockquote>
This maps each vertex to an integer in the range <tt>[0,
num_vertices(g))</tt>. This is necessary for efficient updates of the
heap data structure when an edge is relaxed. The type
heap data structure&nbsp;[<A
HREF="bibliography.html#driscoll88">61</A>] when an edge is relaxed.
The type
<tt>VertexIndexMap</tt> must be a model of
<a href="../../property_map/ReadablePropertyMap.html">Readable Property Map</a>. The value type of the map must be an
integer type. The vertex descriptor type of the graph needs to be
usable as the key type of the map.<br>
<b>Default:</b> <tt>get(vertex_index, g)</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
not have an internal <tt>vertex_index</tt> property.
<br>
<b>Python</b>: Unsupported parameter.
</blockquote>
OUT: <tt>predecessor_map(PredecessorMap p_map)</tt>
@@ -232,7 +244,9 @@ OUT: <tt>predecessor_map(PredecessorMap p_map)</tt>
href="../../property_map/ReadWritePropertyMap.html">Read/Write
Property Map</a> whose key and value types are the same as the vertex
descriptor type of the graph.<br>
<b>Default:</b> <tt>dummy_property_map</tt>
<b>Default:</b> <tt>dummy_property_map</tt><br>
<b>Python</b>: Must be a <tt>vertex_vertex_map</tt> for the graph.<br>
</blockquote>
UTIL/OUT: <tt>distance_map(DistanceMap d_map)</tt>
@@ -257,7 +271,9 @@ UTIL/OUT: <tt>distance_map(DistanceMap d_map)</tt>
<tt>iterator_property_map</tt></a> created from a
<tt>std::vector</tt> of the <tt>WeightMap</tt>'s value type of size
<tt>num_vertices(g)</tt> and using the <tt>i_map</tt> for the index
map.
map.<br>
<b>Python</b>: Must be a <tt>vertex_double_map</tt> for the graph.<br>
</blockquote>
IN: <tt>distance_compare(CompareFunction cmp)</tt>
@@ -271,7 +287,9 @@ IN: <tt>distance_compare(CompareFunction cmp)</tt>
<b>Default:</b>
<tt>std::less&lt;D&gt;</tt> with <tt>D=typename
property_traits&lt;DistanceMap&gt;::value_type</tt>
property_traits&lt;DistanceMap&gt;::value_type</tt><br>
<b>Python</b>: Unsupported parameter.
</blockquote>
IN: <tt>distance_combine(CombineFunction cmb)</tt>
@@ -286,7 +304,9 @@ IN: <tt>distance_combine(CombineFunction cmb)</tt>
type as the distance value type.<br>
<b>Default:</b> <tt>std::plus&lt;D&gt;</tt> with
<tt>D=typename property_traits&lt;DistanceMap&gt;::value_type</tt>
<tt>D=typename property_traits&lt;DistanceMap&gt;::value_type</tt><br>
<b>Python</b>: Unsupported parameter.
</blockquote>
IN: <tt>distance_inf(D inf)</tt>
@@ -294,7 +314,9 @@ IN: <tt>distance_inf(D inf)</tt>
The <tt>inf</tt> object must be the greatest value of any <tt>D</tt> object.
That is, <tt>compare(d, inf) == true</tt> for any <tt>d != inf</tt>.
The type <tt>D</tt> is the value type of the <tt>DistanceMap</tt>.<br>
<b>Default:</b> <tt>std::numeric_limits&lt;D&gt;::max()</tt>
<b>Default:</b> <tt>std::numeric_limits&lt;D&gt;::max()</tt><br>
<b>Python</b>: Unsupported parameter.
</blockquote>
IN: <tt>distance_zero(D zero)</tt>
@@ -304,7 +326,9 @@ IN: <tt>distance_zero(D zero)</tt>
and the <tt>combine</tt> function object.
The type <tt>D</tt> is the value type of the <tt>DistanceMap</tt>.<br>
<b>Default:</b> <tt>D()</tt>with
<tt>D=typename property_traits&lt;DistanceMap&gt;::value_type</tt>
<tt>D=typename property_traits&lt;DistanceMap&gt;::value_type</tt><br>
<b>Python</b>: Unsupported parameter.
</blockquote>
UTIL/OUT: <tt>color_map(ColorMap c_map)</tt>
@@ -323,7 +347,10 @@ UTIL/OUT: <tt>color_map(ColorMap c_map)</tt>
href="../../property_map/iterator_property_map.html">
<tt>iterator_property_map</tt></a> created from a <tt>std::vector</tt>
of <tt>default_color_type</tt> of size <tt>num_vertices(g)</tt> and
using the <tt>i_map</tt> for the index map.
using the <tt>i_map</tt> for the index map.<br>
<b>Python</b>: The color map must be a <tt>vertex_color_map</tt> for
the graph.
</blockquote>
OUT: <tt>visitor(DijkstraVisitor v)</tt>
@@ -334,15 +361,20 @@ OUT: <tt>visitor(DijkstraVisitor v)</tt>
<a href="./DijkstraVisitor.html">Dijkstra Visitor</a> concept.
The visitor object is passed by value <a
href="#2">[2]</a>.<br>
<b>Default:</b> <tt>dijkstra_visitor&lt;null_visitor&gt;</tt>
<b>Default:</b> <tt>dijkstra_visitor&lt;null_visitor&gt;</tt><br>
<b>Python</b>: The parameter should be an object that derives from
the <a
href="DijkstraVisitor.html#python"><tt>DijkstraVisitor</tt></a> type
of the graph.
</blockquote>
<H3>Complexity</H3>
<P>
The time complexity is <i>O((V + E) log V)</i>, or just <i>O(E log V)</i>
if all vertices are reachable from the source.
The time complexity is <i>O(V log V)</i>.
<h3>Visitor Event Points</h3>
+4 -8
View File
@@ -2,19 +2,15 @@
<!--
-- Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 2000
--
-- Permission to use, copy, modify, distribute and sell this software
-- and its documentation for any purpose is hereby granted without fee,
-- provided that the above copyright notice appears in all copies and
-- that both that copyright notice and this permission notice appear
-- in supporting documentation. We make no
-- representations about the suitability of this software for any
-- purpose. It is provided "as is" without express or implied warranty.
-- 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: dijkstra_visitor</Title>
<BODY BGCOLOR="#ffffff" LINK="#0000ee" TEXT="#000000" VLINK="#551a8b"
ALINK="#ff0000">
<IMG SRC="../../../c++boost.gif"
<IMG SRC="../../../boost.png"
ALT="C++ Boost" width="277" height="86">
<BR Clear>
+4 -8
View File
@@ -2,19 +2,15 @@
<!--
-- Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 2000
--
-- Permission to use, copy, modify, distribute and sell this software
-- and its documentation for any purpose is hereby granted without fee,
-- provided that the above copyright notice appears in all copies and
-- that both that copyright notice and this permission notice appear
-- in supporting documentation. We make no
-- representations about the suitability of this software for any
-- purpose. It is provided "as is" without express or implied warranty.
-- 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: distance_recorder</Title>
<BODY BGCOLOR="#ffffff" LINK="#0000ee" TEXT="#000000" VLINK="#551a8b"
ALINK="#ff0000">
<IMG SRC="../../../c++boost.gif"
<IMG SRC="../../../boost.png"
ALT="C++ Boost" width="277" height="86">
<BR Clear>
+4 -8
View File
@@ -2,19 +2,15 @@
<!--
-- Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 2000
--
-- Permission to use, copy, modify, distribute and sell this software
-- and its documentation for any purpose is hereby granted without fee,
-- provided that the above copyright notice appears in all copies and
-- that both that copyright notice and this permission notice appear
-- in supporting documentation. Silicon Graphics makes no
-- representations about the suitability of this software for any
-- purpose. It is provided "as is" without express or implied warranty.
-- 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: Edge List Class</Title>
<BODY BGCOLOR="#ffffff" LINK="#0000ee" TEXT="#000000" VLINK="#551a8b"
ALINK="#ff0000">
<IMG SRC="../../../c++boost.gif"
<IMG SRC="../../../boost.png"
ALT="C++ Boost" width="277" height="86">
<BR Clear>
+17 -17
View File
@@ -2,19 +2,15 @@
<!--
-- Copyright (c) Jeremy Siek 2000
--
-- Permission to use, copy, modify, distribute and sell this software
-- and its documentation for any purpose is hereby granted without fee,
-- provided that the above copyright notice appears in all copies and
-- that both that copyright notice and this permission notice appear
-- in supporting documentation. Silicon Graphics makes no
-- representations about the suitability of this software for any
-- purpose. It is provided "as is" without express or implied warranty.
-- 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: Edmunds-Karp Maximum Flow</Title>
<BODY BGCOLOR="#ffffff" LINK="#0000ee" TEXT="#000000" VLINK="#551a8b"
ALINK="#ff0000">
<IMG SRC="../../../c++boost.gif"
<IMG SRC="../../../boost.png"
ALT="C++ Boost" width="277" height="86">
<BR Clear>
@@ -25,19 +21,19 @@
<PRE>
<i>// named paramter version</i>
template &lt;class <a href="./VertexListGraph.html">VertexListGraph</a>, class P, class T, class R&gt;
typename detail::edge_capacity_value&lt;VertexListGraph, P, T, R&gt;::value_type
edmunds_karp_max_flow(VertexListGraph& g,
typename graph_traits&lt;VertexListGraph&gt;::vertex_descriptor src,
typename graph_traits&lt;VertexListGraph&gt;::vertex_descriptor sink,
template &lt;class <a href="./Graph.html">Graph</a>, class P, class T, class R&gt;
typename detail::edge_capacity_value&lt;Graph, P, T, R&gt;::value_type
edmunds_karp_max_flow(Graph& g,
typename graph_traits&lt;Graph&gt;::vertex_descriptor src,
typename graph_traits&lt;Graph&gt;::vertex_descriptor sink,
const bgl_named_params&lt;P, T, R&gt;&amp; params = <i>all defaults</i>)
<i>// non-named parameter version</i>
template &lt;class <a href="./VertexListGraph.html">VertexListGraph</a>,
template &lt;class <a href="./Graph.html">Graph</a>,
class CapacityEdgeMap, class ResidualCapacityEdgeMap,
class ReverseEdgeMap, class ColorMap, class PredEdgeMap&gt;
typename property_traits&lt;CapacityEdgeMap&gt;::value_type
edmunds_karp_max_flow(VertexListGraph&amp; g,
edmunds_karp_max_flow(Graph&amp; g,
typename graph_traits&lt;Graph&gt;::vertex_descriptor src,
typename graph_traits&lt;Graph&gt;::vertex_descriptor sink,
CapacityEdgeMap cap, ResidualCapacityEdgeMap res, ReverseEdgeMap rev,
@@ -101,11 +97,11 @@ algorithm.
<h3>Parameters</h3>
IN: <tt>VertexListGraph&amp; g</tt>
IN: <tt>Graph&amp; g</tt>
<blockquote>
A directed graph. The
graph's type must be a model of <a
href="./VertexListGraph.html">VertexListGraph</a>. For each edge
href="./VertexListGraph.html">VertexListGraph</a> and <a href="./IncidenceGraph.html">IncidenceGraph</a> For each edge
<i>(u,v)</i> in the graph, the reverse edge <i>(v,u)</i> must also
be in the graph.
</blockquote>
@@ -195,6 +191,10 @@ IN: <tt>vertex_index_map(VertexIndexMap i_map)</tt>
Map</a>. The key type of the map must be the graph's vertex
descriptor type.<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
not have an internal <tt>vertex_index</tt> property.
</blockquote>
+6 -11
View File
@@ -1,15 +1,10 @@
// Boost.Graph library isomorphism test
// Copyright (C) 2001 Doug Gregor (gregod@cs.rpi.edu)
// Copyright (C) 2001 Douglas Gregor (gregod@cs.rpi.edu)
//
// Permission to copy, use, sell and distribute this software is granted
// provided this copyright notice appears in all copies.
// Permission to modify the code and to distribute modified code is granted
// provided this copyright notice appears in all copies, and a notice
// that the code was modified is included with the copyright notice.
//
// This software is provided "as is" without express or implied warranty,
// and with no claim as to its suitability for any purpose.
// 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)
// For more information, see http://www.boost.org
//
@@ -94,7 +89,7 @@ void test_isomorphism()
std::vector<graph_traits<GraphB>::vertex_descriptor> f(num_vertices(Ga));
bool ret = isomorphism(Ga, Gb, &f[0], invariantA, invariantB,
invariantB.max(),
(invariantB.max)(),
get(vertex_index, Ga), get(vertex_index, Gb));
assert(ret == true);
@@ -107,5 +102,5 @@ void test_isomorphism()
int test_main(int, char* [])
{
test_isomorphism();
return EXIT_SUCCESS;
return boost::report_errors();
}
+152
View File
@@ -0,0 +1,152 @@
<HTML>
<!--
-- Copyright (c) 2004, 2005 The Trustees of Indiana University
--
-- Use, modification and distribution is 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)
--
-- Authors: Douglas Gregor
-- Jeremiah Willcock
-- Andrew Lumsdaine
-->
<Head>
<Title>Boost Graph Library: Erd&ouml;s-Renyi Generator</Title>
<script language="JavaScript" type="text/JavaScript">
<!--
function address(host, user) {
var atchar = '@';
var thingy = user+atchar+host;
thingy = '<a hre' + 'f=' + "mai" + "lto:" + thingy + '>' + user+atchar+host + '</a>';
document.write(thingy);
}
//-->
</script>
</head>
<BODY BGCOLOR="#ffffff" LINK="#0000ee" TEXT="#000000" VLINK="#551a8b"
ALINK="#ff0000">
<IMG SRC="../../../boost.png"
ALT="C++ Boost" width="277" height="86">
<tt>erdos_renyi_iterator</tt>
<br>
<PRE>
template&lt;typename RandomGenerator, typename Graph&gt;
class erdos_renyi_iterator
{
public:
typedef std::input_iterator_tag iterator_category;
typedef std::pair&lt;vertices_size_type, vertices_size_type&gt; value_type;
typedef const value_type&amp; reference;
typedef const value_type* pointer;
typedef void difference_type;
erdos_renyi_iterator();
erdos_renyi_iterator(RandomGenerator&amp; gen, vertices_size_type n,
double fraction = 0.0, bool allow_self_loops = false);
erdos_renyi_iterator(RandomGenerator&amp; gen, vertices_size_type n,
edges_size_type m, bool allow_self_loops = false);
// Iterator operations
reference operator*() const;
pointer operator-&gt;() const;
erdos_renyi_iterator&amp; operator++();
erdos_renyi_iterator operator++(int);
bool operator==(const erdos_renyi_iterator&amp; other) const;
bool operator!=(const erdos_renyi_iterator&amp; other) const;
};
</PRE>
<p> This class template implements a generator for Erd&ouml;s-Renyi
graphs, suitable for initializing an <a
href="adjacency_list.html"><tt>adjacency_list</tt></a> or other graph
structure with iterator-based initialization. An Erd&ouml;s-Renyi
graph <em>G = (n, p)</em> is a graph with <em>n</em> vertices
that. The probability of having an edge <em>(u, v)</em> in <em>G</em>
is <em>p</em> for any vertices <em>u</em> and <em>v</em>. Typically,
there are no self-loops, but the generator can optionally introduce
self-loops with probability <em>p</em>. This generator will not
produce any parallel edges and will produce edges in sorted order (as
required by, e.g., the <a
href="compressed_sparse_row.html"><tt>compressed_sparse_row_graph</tt></a>).</p>
<p>Erd&ouml;s-Renyi graphs typically exhibit very little
structure. For this reason, they are rarely useful in modeling
real-world problems. However, they are often used when determining
the theoretical complexity of complex graph algorithms.</p>
<p>If you want the possibility of generating parallel edges and don't
care about sorted order, use the <a
href="erdos_renyi_generator.html"><tt>erdos_renyi_iterator</tt></a>.</p>
<h3>Where Defined</h3>
<a href="../../../boost/graph/erdos_renyi_generator.hpp"><tt>boost/graph/erdos_renyi_generator.hpp</tt></a>
<h3>Constructors</h3>
<a name="default-constructor"/>
<pre>erdos_renyi_iterator();</pre>
<blockquote>
Constructs a past-the-end iterator.
</blockquote>
<pre>
erdos_renyi_iterator(RandomGenerator&amp; gen, vertices_size_type n,
double fraction = 0.0, bool allow_self_loops = false);
</pre>
<blockquote>
Constructs an Erd&ouml;s-Renyi generator iterator that creates a
graph with <tt>n</tt> vertices and a given <tt>fraction</tt> of the
total number of edges that a simple graph may have.
<tt>probability</tt>. Random vertices and edges are selected using the
random number generator <tt>gen</tt>. Self-loops are permitted only when
<tt>allow_self_loops</tt> is <tt>true</tt>.
</blockquote>
<pre>
erdos_renyi_iterator(RandomGenerator&amp; gen, vertices_size_type n,
edges_size_type m, bool allow_self_loops = false);
</pre>
<blockquote>
Constructs an Erd&ouml;s-Renyi generator iterator that creates a
graph with <tt>n</tt> vertices and <tt>m</tt> edges.
<tt>probability</tt>. Random vertices and edges are selected using the
random number generator <tt>gen</tt>. Self-loops are permitted only when
<tt>allow_self_loops</tt> is <tt>true</tt>.
</blockquote>
<H3>Example</H3>
<pre>
#include &lt;boost/graph/adjacency_list.hpp&gt;
#include &lt;boost/graph/erdos_renyi_generator.hpp&gt;
#include &lt;boost/random/linear_congruential.hpp&gt;
typedef boost::adjacency_list&lt;&gt; Graph;
typedef boost::erdos_renyi_iterator&lt;boost::minstd_rand, Graph&gt; ERGen;
int main()
{
boost::minstd_rand gen;
// Create graph with 100 nodes and edges with probability 0.05
Graph g(ERGen(gen, 100, 0.05), ERGen(), 100);
return 0;
}
</pre>
<br>
<HR>
<TABLE>
<TR valign=top>
<TD nowrap>Copyright &copy 2005</TD><TD>
<A HREF="../../../people/doug_gregor.html">Doug Gregor</A>, Indiana University (<script language="Javascript">address("cs.indiana.edu", "dgregor")</script>)<br>
<A HREF=http://www.osl.iu.edu/~lums>Andrew Lumsdaine</A>,
Indiana University (<script language="Javascript">address("osl.iu.edu", "lums")</script>)
</TD></TR></TABLE>
</BODY>
</HTML>
+4 -8
View File
@@ -2,19 +2,15 @@
<!--
-- Copyright (c) Jeremy Siek 2002
--
-- Permission to use, copy, modify, distribute and sell this software
-- and its documentation for any purpose is hereby granted without fee,
-- provided that the above copyright notice appears in all copies and
-- that both that copyright notice and this permission notice appear
-- in supporting documentation. Jeremy Siek makes no
-- representations about the suitability of this software for any
-- purpose. It is provided "as is" without express or implied warranty.
-- 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: Exceptions</Title>
<BODY BGCOLOR="#ffffff" LINK="#0000ee" TEXT="#000000" VLINK="#551a8b"
ALINK="#ff0000">
<IMG SRC="../../../c++boost.gif"
<IMG SRC="../../../boost.png"
ALT="C++ Boost" width="277" height="86">
<BR Clear>
+5 -9
View File
@@ -2,19 +2,15 @@
<!--
-- Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 2000
--
-- Permission to use, copy, modify, distribute and sell this software
-- and its documentation for any purpose is hereby granted without fee,
-- provided that the above copyright notice appears in all copies and
-- that both that copyright notice and this permission notice appear
-- in supporting documentation. We make no
-- representations about the suitability of this software for any
-- purpose. It is provided "as is" without express or implied warranty.
-- 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: FAQ</Title>
<BODY BGCOLOR="#ffffff" LINK="#0000ee" TEXT="#000000" VLINK="#551a8b"
ALINK="#ff0000">
<IMG SRC="../../../c++boost.gif"
<IMG SRC="../../../boost.png"
ALT="C++ Boost" width="277" height="86">
<BR Clear>
@@ -77,7 +73,7 @@ disadvantage of an adaptor class (compared to overloaded functions) is
that one has to physically wrap and unwrap the objects as they go
into/out of BGL algorithms. So the overloaded function route is more
convenient. Granted, this is not a huge difference, but since there
weren't other strong reasons, it was enough for us to choose member
weren't other strong reasons, it was enough for us to choose free
functions.
</p>
+5
View File
@@ -1,4 +1,9 @@
# -*- makefile -*-
# Copyright (c) 2002 Trustees of Indiana University
#
# 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)
.SUFFIXES: .fig .gif .tif .jpeg
Binary file not shown.

After

Width:  |  Height:  |  Size: 492 B

+17
View File
@@ -0,0 +1,17 @@
graph A {
node[shape="circle"]
B [ style="filled", fillcolor="red" ];
G [ style="filled", fillcolor="red" ];
A [ style="filled", fillcolor="red" ];
A -- F[label="1"]
A -- B[label="1"]
A -- G[label="3"]
B -- C[label="0"]
B -- D[label="0"]
B -- E[label="1"]
C -- D[label="0"]
E -- F[label="1"]
G -- I[label="2"]
G -- H[label="2"]
H -- I[label="2"]
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 35 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 786 B

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 3.7 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 121 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 115 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 182 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 7.7 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 8.3 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 344 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 125 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 224 B

+920
View File
@@ -0,0 +1,920 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CanvasColor</key>
<dict>
<key>w</key>
<string>1</string>
</dict>
<key>ColumnAlign</key>
<integer>1</integer>
<key>ColumnSpacing</key>
<real>36</real>
<key>GraphDocumentVersion</key>
<integer>3</integer>
<key>GraphicsList</key>
<array>
<dict>
<key>Bounds</key>
<string>{{444, 184.125}, {50, 14}}</string>
<key>Class</key>
<string>ShapedGraphic</string>
<key>FitText</key>
<string>YES</string>
<key>ID</key>
<integer>96</integer>
<key>Shape</key>
<string>Rectangle</string>
<key>Style</key>
<dict>
<key>fill</key>
<dict>
<key>Draws</key>
<string>NO</string>
</dict>
<key>shadow</key>
<dict>
<key>Draws</key>
<string>NO</string>
</dict>
<key>stroke</key>
<dict>
<key>Draws</key>
<string>NO</string>
</dict>
</dict>
<key>Text</key>
<dict>
<key>Text</key>
<string>{\rtf1\mac\ansicpg10000\cocoartf102
{\fonttbl\f0\fswiss\fcharset77 Helvetica;}
{\colortbl;\red255\green255\blue255;}
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
\f0\fs24 \cf0 Color 2}</string>
</dict>
</dict>
<dict>
<key>Bounds</key>
<string>{{412, 182}, {19, 19}}</string>
<key>Class</key>
<string>ShapedGraphic</string>
<key>ID</key>
<integer>95</integer>
<key>Shape</key>
<string>Rectangle</string>
<key>Style</key>
<dict>
<key>fill</key>
<dict>
<key>Color</key>
<dict>
<key>b</key>
<string>1</string>
<key>g</key>
<string>0.011662</string>
<key>r</key>
<string>0</string>
</dict>
</dict>
</dict>
</dict>
<dict>
<key>Bounds</key>
<string>{{444, 160.125}, {50, 14}}</string>
<key>Class</key>
<string>ShapedGraphic</string>
<key>FitText</key>
<string>YES</string>
<key>ID</key>
<integer>94</integer>
<key>Shape</key>
<string>Rectangle</string>
<key>Style</key>
<dict>
<key>fill</key>
<dict>
<key>Draws</key>
<string>NO</string>
</dict>
<key>shadow</key>
<dict>
<key>Draws</key>
<string>NO</string>
</dict>
<key>stroke</key>
<dict>
<key>Draws</key>
<string>NO</string>
</dict>
</dict>
<key>Text</key>
<dict>
<key>Text</key>
<string>{\rtf1\mac\ansicpg10000\cocoartf102
{\fonttbl\f0\fswiss\fcharset77 Helvetica;}
{\colortbl;\red255\green255\blue255;}
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
\f0\fs24 \cf0 Color 1}</string>
</dict>
</dict>
<dict>
<key>Bounds</key>
<string>{{412, 158}, {19, 19}}</string>
<key>Class</key>
<string>ShapedGraphic</string>
<key>ID</key>
<integer>93</integer>
<key>Shape</key>
<string>Rectangle</string>
<key>Style</key>
<dict>
<key>fill</key>
<dict>
<key>Color</key>
<dict>
<key>b</key>
<string>0.00237679</string>
<key>g</key>
<string>1</string>
<key>r</key>
<string>0.0883496</string>
</dict>
</dict>
</dict>
</dict>
<dict>
<key>Bounds</key>
<string>{{444, 136.125}, {50, 14}}</string>
<key>Class</key>
<string>ShapedGraphic</string>
<key>FitText</key>
<string>YES</string>
<key>ID</key>
<integer>92</integer>
<key>Shape</key>
<string>Rectangle</string>
<key>Style</key>
<dict>
<key>fill</key>
<dict>
<key>Draws</key>
<string>NO</string>
</dict>
<key>shadow</key>
<dict>
<key>Draws</key>
<string>NO</string>
</dict>
<key>stroke</key>
<dict>
<key>Draws</key>
<string>NO</string>
</dict>
</dict>
<key>Text</key>
<dict>
<key>Text</key>
<string>{\rtf1\mac\ansicpg10000\cocoartf102
{\fonttbl\f0\fswiss\fcharset77 Helvetica;}
{\colortbl;\red255\green255\blue255;}
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
\f0\fs24 \cf0 Color 0}</string>
</dict>
</dict>
<dict>
<key>Bounds</key>
<string>{{412, 134}, {19, 19}}</string>
<key>Class</key>
<string>ShapedGraphic</string>
<key>ID</key>
<integer>91</integer>
<key>Shape</key>
<string>Rectangle</string>
<key>Style</key>
<dict>
<key>fill</key>
<dict>
<key>Color</key>
<dict>
<key>b</key>
<string>0</string>
<key>g</key>
<string>0.0515676</string>
<key>r</key>
<string>1</string>
</dict>
</dict>
</dict>
</dict>
<dict>
<key>Bounds</key>
<string>{{426, 98.125}, {52, 14}}</string>
<key>Class</key>
<string>ShapedGraphic</string>
<key>FitText</key>
<string>YES</string>
<key>ID</key>
<integer>90</integer>
<key>Shape</key>
<string>Rectangle</string>
<key>Style</key>
<dict>
<key>fill</key>
<dict>
<key>Draws</key>
<string>NO</string>
</dict>
<key>shadow</key>
<dict>
<key>Draws</key>
<string>NO</string>
</dict>
<key>stroke</key>
<dict>
<key>Draws</key>
<string>NO</string>
</dict>
</dict>
<key>Text</key>
<dict>
<key>Text</key>
<string>{\rtf1\mac\ansicpg10000\cocoartf102
{\fonttbl\f0\fswiss\fcharset77 Helvetica;}
{\colortbl;\red255\green255\blue255;}
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
\f0\fs24 \cf0 Legend}</string>
</dict>
</dict>
<dict>
<key>Bounds</key>
<string>{{396, 90}, {111, 31}}</string>
<key>Class</key>
<string>ShapedGraphic</string>
<key>ID</key>
<integer>89</integer>
<key>Shape</key>
<string>Rectangle</string>
</dict>
<dict>
<key>Bounds</key>
<string>{{396, 122}, {111, 91}}</string>
<key>Class</key>
<string>ShapedGraphic</string>
<key>ID</key>
<integer>88</integer>
<key>Shape</key>
<string>Rectangle</string>
</dict>
<dict>
<key>Class</key>
<string>LineGraphic</string>
<key>Head</key>
<dict>
<key>ID</key>
<integer>80</integer>
</dict>
<key>ID</key>
<integer>87</integer>
<key>Points</key>
<array>
<string>{314, 217}</string>
<string>{314, 96}</string>
</array>
<key>Style</key>
<dict>
<key>stroke</key>
<dict>
<key>HeadArrow</key>
<string>0</string>
<key>LineType</key>
<integer>1</integer>
<key>TailArrow</key>
<string>0</string>
</dict>
</dict>
<key>Tail</key>
<dict>
<key>ID</key>
<integer>79</integer>
</dict>
</dict>
<dict>
<key>Class</key>
<string>LineGraphic</string>
<key>Head</key>
<dict>
<key>ID</key>
<integer>79</integer>
</dict>
<key>ID</key>
<integer>86</integer>
<key>Points</key>
<array>
<string>{140, 244}</string>
<string>{287, 244}</string>
</array>
<key>Style</key>
<dict>
<key>stroke</key>
<dict>
<key>HeadArrow</key>
<string>0</string>
<key>LineType</key>
<integer>1</integer>
<key>TailArrow</key>
<string>0</string>
</dict>
</dict>
<key>Tail</key>
<dict>
<key>ID</key>
<integer>78</integer>
</dict>
</dict>
<dict>
<key>Class</key>
<string>LineGraphic</string>
<key>Head</key>
<dict>
<key>ID</key>
<integer>78</integer>
</dict>
<key>ID</key>
<integer>85</integer>
<key>Points</key>
<array>
<string>{195.765, 170.877}</string>
<string>{133.235, 226.123}</string>
</array>
<key>Style</key>
<dict>
<key>stroke</key>
<dict>
<key>HeadArrow</key>
<string>0</string>
<key>LineType</key>
<integer>1</integer>
<key>TailArrow</key>
<string>0</string>
</dict>
</dict>
<key>Tail</key>
<dict>
<key>ID</key>
<integer>77</integer>
</dict>
</dict>
<dict>
<key>Class</key>
<string>LineGraphic</string>
<key>Head</key>
<dict>
<key>ID</key>
<integer>79</integer>
</dict>
<key>ID</key>
<integer>84</integer>
<key>Points</key>
<array>
<string>{235.786, 171.372}</string>
<string>{294.214, 225.628}</string>
</array>
<key>Style</key>
<dict>
<key>stroke</key>
<dict>
<key>HeadArrow</key>
<string>0</string>
<key>LineType</key>
<integer>1</integer>
<key>TailArrow</key>
<string>0</string>
</dict>
</dict>
<key>Tail</key>
<dict>
<key>ID</key>
<integer>77</integer>
</dict>
</dict>
<dict>
<key>Class</key>
<string>LineGraphic</string>
<key>Head</key>
<dict>
<key>ID</key>
<integer>80</integer>
</dict>
<key>ID</key>
<integer>83</integer>
<key>Points</key>
<array>
<string>{236.501, 135.428}</string>
<string>{293.499, 86.5722}</string>
</array>
<key>Style</key>
<dict>
<key>stroke</key>
<dict>
<key>HeadArrow</key>
<string>0</string>
<key>LineType</key>
<integer>1</integer>
<key>TailArrow</key>
<string>0</string>
</dict>
</dict>
<key>Tail</key>
<dict>
<key>ID</key>
<integer>77</integer>
</dict>
</dict>
<dict>
<key>Class</key>
<string>LineGraphic</string>
<key>Head</key>
<dict>
<key>ID</key>
<integer>80</integer>
</dict>
<key>ID</key>
<integer>82</integer>
<key>Points</key>
<array>
<string>{140, 69}</string>
<string>{287, 69}</string>
</array>
<key>Style</key>
<dict>
<key>stroke</key>
<dict>
<key>HeadArrow</key>
<string>0</string>
<key>LineType</key>
<integer>1</integer>
<key>TailArrow</key>
<string>0</string>
</dict>
</dict>
<key>Tail</key>
<dict>
<key>ID</key>
<integer>76</integer>
</dict>
</dict>
<dict>
<key>Class</key>
<string>LineGraphic</string>
<key>Head</key>
<dict>
<key>ID</key>
<integer>78</integer>
</dict>
<key>ID</key>
<integer>81</integer>
<key>Points</key>
<array>
<string>{113, 96}</string>
<string>{113, 217}</string>
</array>
<key>Style</key>
<dict>
<key>stroke</key>
<dict>
<key>HeadArrow</key>
<string>0</string>
<key>LineType</key>
<integer>1</integer>
<key>TailArrow</key>
<string>0</string>
</dict>
</dict>
<key>Tail</key>
<dict>
<key>ID</key>
<integer>76</integer>
</dict>
</dict>
<dict>
<key>Bounds</key>
<string>{{287, 42}, {54, 54}}</string>
<key>Class</key>
<string>ShapedGraphic</string>
<key>ID</key>
<integer>80</integer>
<key>Shape</key>
<string>Circle</string>
<key>Style</key>
<dict>
<key>fill</key>
<dict>
<key>Color</key>
<dict>
<key>b</key>
<string>0</string>
<key>g</key>
<string>1</string>
<key>r</key>
<string>0.184589</string>
</dict>
</dict>
</dict>
<key>Text</key>
<dict>
<key>Text</key>
<string>{\rtf1\mac\ansicpg10000\cocoartf102
{\fonttbl\f0\fswiss\fcharset77 Helvetica;}
{\colortbl;\red255\green255\blue255;}
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
\f0\fs24 \cf0 E}</string>
</dict>
</dict>
<dict>
<key>Bounds</key>
<string>{{287, 217}, {54, 54}}</string>
<key>Class</key>
<string>ShapedGraphic</string>
<key>ID</key>
<integer>79</integer>
<key>Shape</key>
<string>Circle</string>
<key>Style</key>
<dict>
<key>fill</key>
<dict>
<key>Color</key>
<dict>
<key>b</key>
<string>1</string>
<key>g</key>
<string>0.0015586</string>
<key>r</key>
<string>0.00100458</string>
</dict>
</dict>
</dict>
<key>Text</key>
<dict>
<key>Text</key>
<string>{\rtf1\mac\ansicpg10000\cocoartf102
{\fonttbl\f0\fswiss\fcharset77 Helvetica;}
{\colortbl;\red255\green255\blue255;}
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
\f0\fs24 \cf0 D}</string>
</dict>
</dict>
<dict>
<key>Bounds</key>
<string>{{86, 217}, {54, 54}}</string>
<key>Class</key>
<string>ShapedGraphic</string>
<key>ID</key>
<integer>78</integer>
<key>Shape</key>
<string>Circle</string>
<key>Style</key>
<dict>
<key>fill</key>
<dict>
<key>Color</key>
<dict>
<key>b</key>
<string>0.00237679</string>
<key>g</key>
<string>1</string>
<key>r</key>
<string>0.0883496</string>
</dict>
</dict>
</dict>
<key>Text</key>
<dict>
<key>Text</key>
<string>{\rtf1\mac\ansicpg10000\cocoartf102
{\fonttbl\f0\fswiss\fcharset77 Helvetica;}
{\colortbl;\red255\green255\blue255;}
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
\f0\fs24 \cf0 C}</string>
</dict>
</dict>
<dict>
<key>Bounds</key>
<string>{{189, 126}, {54, 54}}</string>
<key>Class</key>
<string>ShapedGraphic</string>
<key>ID</key>
<integer>77</integer>
<key>Shape</key>
<string>Circle</string>
<key>Style</key>
<dict>
<key>fill</key>
<dict>
<key>Color</key>
<dict>
<key>b</key>
<string>0</string>
<key>g</key>
<string>0.0258026</string>
<key>r</key>
<string>1</string>
</dict>
</dict>
</dict>
<key>Text</key>
<dict>
<key>Text</key>
<string>{\rtf1\mac\ansicpg10000\cocoartf102
{\fonttbl\f0\fswiss\fcharset77 Helvetica;}
{\colortbl;\red255\green255\blue255;}
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
\f0\fs24 \cf0 B}</string>
</dict>
</dict>
<dict>
<key>Bounds</key>
<string>{{86, 42}, {54, 54}}</string>
<key>Class</key>
<string>ShapedGraphic</string>
<key>ID</key>
<integer>76</integer>
<key>Shape</key>
<string>Circle</string>
<key>Style</key>
<dict>
<key>fill</key>
<dict>
<key>Color</key>
<dict>
<key>b</key>
<string>0</string>
<key>g</key>
<string>0.0515676</string>
<key>r</key>
<string>1</string>
</dict>
</dict>
</dict>
<key>Text</key>
<dict>
<key>Text</key>
<string>{\rtf1\mac\ansicpg10000\cocoartf102
{\fonttbl\f0\fswiss\fcharset77 Helvetica;}
{\colortbl;\red255\green255\blue255;}
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\qc
\f0\fs24 \cf0 A}</string>
</dict>
</dict>
</array>
<key>GridInfo</key>
<dict/>
<key>GuidesVisible</key>
<string>YES</string>
<key>HPages</key>
<integer>1</integer>
<key>ImageCounter</key>
<integer>1</integer>
<key>IsPalette</key>
<string>NO</string>
<key>Layers</key>
<array>
<dict>
<key>Lock</key>
<string>NO</string>
<key>Name</key>
<string>Layer 1</string>
<key>Print</key>
<string>YES</string>
<key>View</key>
<string>YES</string>
</dict>
</array>
<key>LayoutInfo</key>
<dict>
<key>AutoAdjust</key>
<string>YES</string>
<key>ChildOrdering</key>
<integer>2</integer>
<key>MagneticFieldCenter</key>
<string>{0, 0}</string>
</dict>
<key>LinksVisible</key>
<string>NO</string>
<key>MagnetsVisible</key>
<string>NO</string>
<key>Orientation</key>
<integer>2</integer>
<key>PageBreaks</key>
<string>YES</string>
<key>PageSetup</key>
<data>
BAt0eXBlZHN0cmVhbYED6IQBQISEhAtOU1ByaW50SW5mbwGEhAhOU09iamVjdACFkoSE
hBNOU011dGFibGVEaWN0aW9uYXJ5AISEDE5TRGljdGlvbmFyeQCUhAFpFJKEhIQITlNT
dHJpbmcBlIQBKxBOU0pvYkRpc3Bvc2l0aW9uhpKEmZkPTlNQcmludFNwb29sSm9ihpKE
mZkLTlNQYXBlclNpemWGkoSEhAdOU1ZhbHVlAJSEASqEhAx7X05TU2l6ZT1mZn2cgQJk
gQMYhpKEmZkZTlNQcmludFJldmVyc2VPcmllbnRhdGlvboaShISECE5TTnVtYmVyAJ2b
hJeXAIaShJmZFE5TVmVydGljYWxQYWdpbmF0aW9uhpKEoZuilwCGkoSZmRROU1ZlcnRp
Y2FsbHlDZW50ZXJlZIaShKGbopcBhpKEmZkOTlNQTVBhZ2VGb3JtYXSGkoSEhAZOU0Rh
dGEAlJeBHa2EB1s3NTk3Y108P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYt
OCI/Pgo8IURPQ1RZUEUgcGxpc3QgUFVCTElDICItLy9BcHBsZSBDb21wdXRlci8vRFRE
IFBMSVNUIDEuMC8vRU4iICJodHRwOi8vd3d3LmFwcGxlLmNvbS9EVERzL1Byb3BlcnR5
TGlzdC0xLjAuZHRkIj4KPHBsaXN0IHZlcnNpb249IjEuMCI+CjxkaWN0PgoJPGtleT5j
b20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTUhvcml6b250YWxSZXM8L2tleT4KCTxk
aWN0PgoJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5jcmVhdG9yPC9rZXk+CgkJ
PHN0cmluZz5jb20uYXBwbGUucHJpbnRpbmdtYW5hZ2VyPC9zdHJpbmc+CgkJPGtleT5j
b20uYXBwbGUucHJpbnQudGlja2V0Lml0ZW1BcnJheTwva2V5PgoJCTxhcnJheT4KCQkJ
PGRpY3Q+CgkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0LlBNSG9yaXpv
bnRhbFJlczwva2V5PgoJCQkJPHJlYWw+NzI8L3JlYWw+CgkJCQk8a2V5PmNvbS5hcHBs
ZS5wcmludC50aWNrZXQuY2xpZW50PC9rZXk+CgkJCQk8c3RyaW5nPmNvbS5hcHBsZS5w
cmludGluZ21hbmFnZXI8L3N0cmluZz4KCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRp
Y2tldC5tb2REYXRlPC9rZXk+CgkJCQk8ZGF0ZT4yMDAzLTAxLTI0VDE2OjI4OjU0Wjwv
ZGF0ZT4KCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5zdGF0ZUZsYWc8L2tl
eT4KCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI+CgkJCTwvZGljdD4KCQk8L2FycmF5PgoJ
PC9kaWN0PgoJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTU9yaWVudGF0
aW9uPC9rZXk+Cgk8ZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY3Jl
YXRvcjwva2V5PgoJCTxzdHJpbmc+Y29tLmFwcGxlLnByaW50aW5nbWFuYWdlcjwvc3Ry
aW5nPgoJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5pdGVtQXJyYXk8L2tleT4K
CQk8YXJyYXk+CgkJCTxkaWN0PgoJCQkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZv
cm1hdC5QTU9yaWVudGF0aW9uPC9rZXk+CgkJCQk8aW50ZWdlcj4xPC9pbnRlZ2VyPgoJ
CQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNsaWVudDwva2V5PgoJCQkJPHN0
cmluZz5jb20uYXBwbGUucHJpbnRpbmdtYW5hZ2VyPC9zdHJpbmc+CgkJCQk8a2V5PmNv
bS5hcHBsZS5wcmludC50aWNrZXQubW9kRGF0ZTwva2V5PgoJCQkJPGRhdGU+MjAwMy0w
MS0yNFQxNjoyODo1NFo8L2RhdGU+CgkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNr
ZXQuc3RhdGVGbGFnPC9rZXk+CgkJCQk8aW50ZWdlcj4wPC9pbnRlZ2VyPgoJCQk8L2Rp
Y3Q+CgkJPC9hcnJheT4KCTwvZGljdD4KCTxrZXk+Y29tLmFwcGxlLnByaW50LlBhZ2VG
b3JtYXQuUE1TY2FsaW5nPC9rZXk+Cgk8ZGljdD4KCQk8a2V5PmNvbS5hcHBsZS5wcmlu
dC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCTxzdHJpbmc+Y29tLmFwcGxlLnByaW50aW5n
bWFuYWdlcjwvc3RyaW5nPgoJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5pdGVt
QXJyYXk8L2tleT4KCQk8YXJyYXk+CgkJCTxkaWN0PgoJCQkJPGtleT5jb20uYXBwbGUu
cHJpbnQuUGFnZUZvcm1hdC5QTVNjYWxpbmc8L2tleT4KCQkJCTxyZWFsPjE8L3JlYWw+
CgkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY2xpZW50PC9rZXk+CgkJCQk8
c3RyaW5nPmNvbS5hcHBsZS5wcmludGluZ21hbmFnZXI8L3N0cmluZz4KCQkJCTxrZXk+
Y29tLmFwcGxlLnByaW50LnRpY2tldC5tb2REYXRlPC9rZXk+CgkJCQk8ZGF0ZT4yMDAz
LTAxLTI0VDE2OjI4OjU0WjwvZGF0ZT4KCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRp
Y2tldC5zdGF0ZUZsYWc8L2tleT4KCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI+CgkJCTwv
ZGljdD4KCQk8L2FycmF5PgoJPC9kaWN0PgoJPGtleT5jb20uYXBwbGUucHJpbnQuUGFn
ZUZvcm1hdC5QTVZlcnRpY2FsUmVzPC9rZXk+Cgk8ZGljdD4KCQk8a2V5PmNvbS5hcHBs
ZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCTxzdHJpbmc+Y29tLmFwcGxlLnBy
aW50aW5nbWFuYWdlcjwvc3RyaW5nPgoJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tl
dC5pdGVtQXJyYXk8L2tleT4KCQk8YXJyYXk+CgkJCTxkaWN0PgoJCQkJPGtleT5jb20u
YXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTVZlcnRpY2FsUmVzPC9rZXk+CgkJCQk8cmVh
bD43MjwvcmVhbD4KCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5jbGllbnQ8
L2tleT4KCQkJCTxzdHJpbmc+Y29tLmFwcGxlLnByaW50aW5nbWFuYWdlcjwvc3RyaW5n
PgoJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lm1vZERhdGU8L2tleT4KCQkJ
CTxkYXRlPjIwMDMtMDEtMjRUMTY6Mjg6NTRaPC9kYXRlPgoJCQkJPGtleT5jb20uYXBw
bGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJPGludGVnZXI+MDwvaW50
ZWdlcj4KCQkJPC9kaWN0PgoJCTwvYXJyYXk+Cgk8L2RpY3Q+Cgk8a2V5PmNvbS5hcHBs
ZS5wcmludC5QYWdlRm9ybWF0LlBNVmVydGljYWxTY2FsaW5nPC9rZXk+Cgk8ZGljdD4K
CQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCTxzdHJp
bmc+Y29tLmFwcGxlLnByaW50aW5nbWFuYWdlcjwvc3RyaW5nPgoJCTxrZXk+Y29tLmFw
cGxlLnByaW50LnRpY2tldC5pdGVtQXJyYXk8L2tleT4KCQk8YXJyYXk+CgkJCTxkaWN0
PgoJCQkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTVZlcnRpY2FsU2Nh
bGluZzwva2V5PgoJCQkJPHJlYWw+MTwvcmVhbD4KCQkJCTxrZXk+Y29tLmFwcGxlLnBy
aW50LnRpY2tldC5jbGllbnQ8L2tleT4KCQkJCTxzdHJpbmc+Y29tLmFwcGxlLnByaW50
aW5nbWFuYWdlcjwvc3RyaW5nPgoJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0
Lm1vZERhdGU8L2tleT4KCQkJCTxkYXRlPjIwMDMtMDEtMjRUMTY6Mjg6NTRaPC9kYXRl
PgoJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJ
CQkJPGludGVnZXI+MDwvaW50ZWdlcj4KCQkJPC9kaWN0PgoJCTwvYXJyYXk+Cgk8L2Rp
Y3Q+Cgk8a2V5PmNvbS5hcHBsZS5wcmludC5zdWJUaWNrZXQucGFwZXJfaW5mb190aWNr
ZXQ8L2tleT4KCTxkaWN0PgoJCTxrZXk+Y29tLmFwcGxlLnByaW50LlBhZ2VGb3JtYXQu
UE1BZGp1c3RlZFBhZ2VSZWN0PC9rZXk+CgkJPGRpY3Q+CgkJCTxrZXk+Y29tLmFwcGxl
LnByaW50LnRpY2tldC5jcmVhdG9yPC9rZXk+CgkJCTxzdHJpbmc+Y29tLmFwcGxlLnBy
aW50aW5nbWFuYWdlcjwvc3RyaW5nPgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNr
ZXQuaXRlbUFycmF5PC9rZXk+CgkJCTxhcnJheT4KCQkJCTxkaWN0PgoJCQkJCTxrZXk+
Y29tLmFwcGxlLnByaW50LlBhZ2VGb3JtYXQuUE1BZGp1c3RlZFBhZ2VSZWN0PC9rZXk+
CgkJCQkJPGFycmF5PgoJCQkJCQk8cmVhbD4wLjA8L3JlYWw+CgkJCQkJCTxyZWFsPjAu
MDwvcmVhbD4KCQkJCQkJPHJlYWw+NzM0PC9yZWFsPgoJCQkJCQk8cmVhbD41NzY8L3Jl
YWw+CgkJCQkJPC9hcnJheT4KCQkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQu
Y2xpZW50PC9rZXk+CgkJCQkJPHN0cmluZz5jb20uYXBwbGUucHJpbnRpbmdtYW5hZ2Vy
PC9zdHJpbmc+CgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lm1vZERhdGU8
L2tleT4KCQkJCQk8ZGF0ZT4yMDA0LTEyLTE2VDE1OjI1OjIwWjwvZGF0ZT4KCQkJCQk8
a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuc3RhdGVGbGFnPC9rZXk+CgkJCQkJPGlu
dGVnZXI+MDwvaW50ZWdlcj4KCQkJCTwvZGljdD4KCQkJPC9hcnJheT4KCQk8L2RpY3Q+
CgkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFnZUZvcm1hdC5QTUFkanVzdGVkUGFwZXJS
ZWN0PC9rZXk+CgkJPGRpY3Q+CgkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5j
cmVhdG9yPC9rZXk+CgkJCTxzdHJpbmc+Y29tLmFwcGxlLnByaW50aW5nbWFuYWdlcjwv
c3RyaW5nPgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRlbUFycmF5PC9r
ZXk+CgkJCTxhcnJheT4KCQkJCTxkaWN0PgoJCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50
LlBhZ2VGb3JtYXQuUE1BZGp1c3RlZFBhcGVyUmVjdDwva2V5PgoJCQkJCTxhcnJheT4K
CQkJCQkJPHJlYWw+LTE4PC9yZWFsPgoJCQkJCQk8cmVhbD4tMTg8L3JlYWw+CgkJCQkJ
CTxyZWFsPjc3NDwvcmVhbD4KCQkJCQkJPHJlYWw+NTk0PC9yZWFsPgoJCQkJCTwvYXJy
YXk+CgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LmNsaWVudDwva2V5PgoJ
CQkJCTxzdHJpbmc+Y29tLmFwcGxlLnByaW50aW5nbWFuYWdlcjwvc3RyaW5nPgoJCQkJ
CTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5tb2REYXRlPC9rZXk+CgkJCQkJPGRh
dGU+MjAwNC0xMi0xNlQxNToyNToyMFo8L2RhdGU+CgkJCQkJPGtleT5jb20uYXBwbGUu
cHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJCTxpbnRlZ2VyPjA8L2ludGVn
ZXI+CgkJCQk8L2RpY3Q+CgkJCTwvYXJyYXk+CgkJPC9kaWN0PgoJCTxrZXk+Y29tLmFw
cGxlLnByaW50LlBhcGVySW5mby5QTVBhcGVyTmFtZTwva2V5PgoJCTxkaWN0PgoJCQk8
a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCQk8c3RyaW5n
PmNvbS5hcHBsZS5wcmludC5wbS5Qb3N0U2NyaXB0PC9zdHJpbmc+CgkJCTxrZXk+Y29t
LmFwcGxlLnByaW50LnRpY2tldC5pdGVtQXJyYXk8L2tleT4KCQkJPGFycmF5PgoJCQkJ
PGRpY3Q+CgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFwZXJJbmZvLlBNUGFwZXJO
YW1lPC9rZXk+CgkJCQkJPHN0cmluZz5uYS1sZXR0ZXI8L3N0cmluZz4KCQkJCQk8a2V5
PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY2xpZW50PC9rZXk+CgkJCQkJPHN0cmluZz5j
b20uYXBwbGUucHJpbnQucG0uUG9zdFNjcmlwdDwvc3RyaW5nPgoJCQkJCTxrZXk+Y29t
LmFwcGxlLnByaW50LnRpY2tldC5tb2REYXRlPC9rZXk+CgkJCQkJPGRhdGU+MjAwMC0w
Ny0yOFQyMjo1NzowNFo8L2RhdGU+CgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlj
a2V0LnN0YXRlRmxhZzwva2V5PgoJCQkJCTxpbnRlZ2VyPjE8L2ludGVnZXI+CgkJCQk8
L2RpY3Q+CgkJCTwvYXJyYXk+CgkJPC9kaWN0PgoJCTxrZXk+Y29tLmFwcGxlLnByaW50
LlBhcGVySW5mby5QTVVuYWRqdXN0ZWRQYWdlUmVjdDwva2V5PgoJCTxkaWN0PgoJCQk8
a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCQk8c3RyaW5n
PmNvbS5hcHBsZS5wcmludC5wbS5Qb3N0U2NyaXB0PC9zdHJpbmc+CgkJCTxrZXk+Y29t
LmFwcGxlLnByaW50LnRpY2tldC5pdGVtQXJyYXk8L2tleT4KCQkJPGFycmF5PgoJCQkJ
PGRpY3Q+CgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFwZXJJbmZvLlBNVW5hZGp1
c3RlZFBhZ2VSZWN0PC9rZXk+CgkJCQkJPGFycmF5PgoJCQkJCQk8cmVhbD4wLjA8L3Jl
YWw+CgkJCQkJCTxyZWFsPjAuMDwvcmVhbD4KCQkJCQkJPHJlYWw+NzM0PC9yZWFsPgoJ
CQkJCQk8cmVhbD41NzY8L3JlYWw+CgkJCQkJPC9hcnJheT4KCQkJCQk8a2V5PmNvbS5h
cHBsZS5wcmludC50aWNrZXQuY2xpZW50PC9rZXk+CgkJCQkJPHN0cmluZz5jb20uYXBw
bGUucHJpbnRpbmdtYW5hZ2VyPC9zdHJpbmc+CgkJCQkJPGtleT5jb20uYXBwbGUucHJp
bnQudGlja2V0Lm1vZERhdGU8L2tleT4KCQkJCQk8ZGF0ZT4yMDAzLTAxLTI0VDE2OjI4
OjU0WjwvZGF0ZT4KCQkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuc3RhdGVG
bGFnPC9rZXk+CgkJCQkJPGludGVnZXI+MDwvaW50ZWdlcj4KCQkJCTwvZGljdD4KCQkJ
PC9hcnJheT4KCQk8L2RpY3Q+CgkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFwZXJJbmZv
LlBNVW5hZGp1c3RlZFBhcGVyUmVjdDwva2V5PgoJCTxkaWN0PgoJCQk8a2V5PmNvbS5h
cHBsZS5wcmludC50aWNrZXQuY3JlYXRvcjwva2V5PgoJCQk8c3RyaW5nPmNvbS5hcHBs
ZS5wcmludC5wbS5Qb3N0U2NyaXB0PC9zdHJpbmc+CgkJCTxrZXk+Y29tLmFwcGxlLnBy
aW50LnRpY2tldC5pdGVtQXJyYXk8L2tleT4KCQkJPGFycmF5PgoJCQkJPGRpY3Q+CgkJ
CQkJPGtleT5jb20uYXBwbGUucHJpbnQuUGFwZXJJbmZvLlBNVW5hZGp1c3RlZFBhcGVy
UmVjdDwva2V5PgoJCQkJCTxhcnJheT4KCQkJCQkJPHJlYWw+LTE4PC9yZWFsPgoJCQkJ
CQk8cmVhbD4tMTg8L3JlYWw+CgkJCQkJCTxyZWFsPjc3NDwvcmVhbD4KCQkJCQkJPHJl
YWw+NTk0PC9yZWFsPgoJCQkJCTwvYXJyYXk+CgkJCQkJPGtleT5jb20uYXBwbGUucHJp
bnQudGlja2V0LmNsaWVudDwva2V5PgoJCQkJCTxzdHJpbmc+Y29tLmFwcGxlLnByaW50
aW5nbWFuYWdlcjwvc3RyaW5nPgoJCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tl
dC5tb2REYXRlPC9rZXk+CgkJCQkJPGRhdGU+MjAwMy0wMS0yNFQxNjoyODo1NFo8L2Rh
dGU+CgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LnN0YXRlRmxhZzwva2V5
PgoJCQkJCTxpbnRlZ2VyPjA8L2ludGVnZXI+CgkJCQk8L2RpY3Q+CgkJCTwvYXJyYXk+
CgkJPC9kaWN0PgoJCTxrZXk+Y29tLmFwcGxlLnByaW50LlBhcGVySW5mby5wcGQuUE1Q
YXBlck5hbWU8L2tleT4KCQk8ZGljdD4KCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlj
a2V0LmNyZWF0b3I8L2tleT4KCQkJPHN0cmluZz5jb20uYXBwbGUucHJpbnQucG0uUG9z
dFNjcmlwdDwvc3RyaW5nPgoJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuaXRl
bUFycmF5PC9rZXk+CgkJCTxhcnJheT4KCQkJCTxkaWN0PgoJCQkJCTxrZXk+Y29tLmFw
cGxlLnByaW50LlBhcGVySW5mby5wcGQuUE1QYXBlck5hbWU8L2tleT4KCQkJCQk8c3Ry
aW5nPkxldHRlcjwvc3RyaW5nPgoJCQkJCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tl
dC5jbGllbnQ8L2tleT4KCQkJCQk8c3RyaW5nPmNvbS5hcHBsZS5wcmludC5wbS5Qb3N0
U2NyaXB0PC9zdHJpbmc+CgkJCQkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0Lm1v
ZERhdGU8L2tleT4KCQkJCQk8ZGF0ZT4yMDAwLTA3LTI4VDIyOjU3OjA0WjwvZGF0ZT4K
CQkJCQk8a2V5PmNvbS5hcHBsZS5wcmludC50aWNrZXQuc3RhdGVGbGFnPC9rZXk+CgkJ
CQkJPGludGVnZXI+MTwvaW50ZWdlcj4KCQkJCTwvZGljdD4KCQkJPC9hcnJheT4KCQk8
L2RpY3Q+CgkJPGtleT5jb20uYXBwbGUucHJpbnQudGlja2V0LkFQSVZlcnNpb248L2tl
eT4KCQk8c3RyaW5nPjAwLjIwPC9zdHJpbmc+CgkJPGtleT5jb20uYXBwbGUucHJpbnQu
dGlja2V0LnByaXZhdGVMb2NrPC9rZXk+CgkJPGZhbHNlLz4KCQk8a2V5PmNvbS5hcHBs
ZS5wcmludC50aWNrZXQudHlwZTwva2V5PgoJCTxzdHJpbmc+Y29tLmFwcGxlLnByaW50
LlBhcGVySW5mb1RpY2tldDwvc3RyaW5nPgoJPC9kaWN0PgoJPGtleT5jb20uYXBwbGUu
cHJpbnQudGlja2V0LkFQSVZlcnNpb248L2tleT4KCTxzdHJpbmc+MDAuMjA8L3N0cmlu
Zz4KCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC5wcml2YXRlTG9jazwva2V5PgoJ
PGZhbHNlLz4KCTxrZXk+Y29tLmFwcGxlLnByaW50LnRpY2tldC50eXBlPC9rZXk+Cgk8
c3RyaW5nPmNvbS5hcHBsZS5wcmludC5QYWdlRm9ybWF0VGlja2V0PC9zdHJpbmc+Cjwv
ZGljdD4KPC9wbGlzdD4KhpKEmZkPTlNQcmludEFsbFBhZ2VzhpKgkoSZmQtOU1BhcGVy
TmFtZYaShJmZBkxldHRlcoaShJmZFU5TSG9yaXpvbmFsUGFnaW5hdGlvboaShKGbopcA
hpKEmZkWTlNIb3Jpem9udGFsbHlDZW50ZXJlZIaSppKEmZkJTlNQcmludGVyhpKEhIQJ
TlNQcmludGVyAJSShJmZBXBzbGFthoaShJmZCE5TQ29waWVzhpKEoZuilwGGkoSZmQ9O
U1NjYWxpbmdGYWN0b3KGkoShm4SEAWahAYaShJmZDU5TUmlnaHRNYXJnaW6GkoShm7ih
AIaShJmZDk5TQm90dG9tTWFyZ2luhpKEoZu4oQCGkoSZmQxOU0xlZnRNYXJnaW6GkoSh
m7ihAIaShJmZC05TVG9wTWFyZ2luhpKEoZu4oQCGkoSZmQpOU0xhc3RQYWdlhpKEoZui
l4J/////hpKEmZkLTlNGaXJzdFBhZ2WGkoShm6KXAYaShJmZDU5TT3JpZW50YXRpb26G
koShm6KXAIaGhg==
</data>
<key>ReadOnly</key>
<string>NO</string>
<key>RowAlign</key>
<integer>1</integer>
<key>RowSpacing</key>
<real>36</real>
<key>SheetTitle</key>
<string>Canvas 1</string>
<key>SmartAlignmentGuidesActive</key>
<string>YES</string>
<key>SmartDistanceGuidesActive</key>
<string>YES</string>
<key>UseEntirePage</key>
<true/>
<key>VPages</key>
<integer>1</integer>
<key>WindowInfo</key>
<dict>
<key>CurrentSheet</key>
<string>0</string>
<key>Frame</key>
<string>{{664, 346}, {591, 832}}</string>
<key>ShowRuler</key>
<false/>
<key>ShowStatusBar</key>
<true/>
<key>VisibleRegion</key>
<string>{{0, 0}, {576, 734}}</string>
<key>Zoom</key>
<string>1</string>
</dict>
</dict>
</plist>
Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 73 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 129 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 71 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.4 KiB

+57 -98
View File
@@ -2,19 +2,15 @@
<!--
-- Copyright (c) Jeremy Siek 2000
--
-- Permission to use, copy, modify, distribute and sell this software
-- and its documentation for any purpose is hereby granted without fee,
-- provided that the above copyright notice appears in all copies and
-- that both that copyright notice and this permission notice appear
-- in supporting documentation. Silicon Graphics makes no
-- representations about the suitability of this software for any
-- purpose. It is provided "as is" without express or implied warranty.
-- 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>File Dependency Example</Title>
<BODY BGCOLOR="#ffffff" LINK="#0000ee" TEXT="#000000" VLINK="#551a8b"
ALINK="#ff0000">
<IMG SRC="../../../c++boost.gif"
<IMG SRC="../../../boost.png"
ALT="C++ Boost" width="277" height="86">
<BR Clear>
@@ -85,14 +81,27 @@ href="../example/file_dependencies.cpp"><TT>examples/file_dependencies.cpp</TT><
<H2>Graph Setup</H2>
<P>
Here we show the construction of the graph. For simplicity we have
Here we show the construction of the graph. First, these are the required
header files:
<P>
<PRE>
#include &lt;iostream&gt; // std::cout
#include &lt;utility&gt; // std::pair
#include &lt;boost/graph/graph_traits.hpp&gt;
#include &lt;boost/graph/adjacency_list.hpp&gt;
#include &lt;boost/graph/topological_sort.hpp&gt;
</PRE>
<P>
For simplicity we have
constructed the graph &quot;by-hand&quot;. A compilation system such
as <TT>make</TT> would instead parse a <TT>Makefile</TT> to get the
list of files and to set-up the dependencies. We use the
<TT>adjacency_list</TT> class to represent the graph. The
<TT>vecS</TT> selector means that a <TT>std::vector</TT> will be used
to represent each edge-list, which provides efficient traversal. The
<TT>directedS</TT> selector means we want a directed graph, and the
<TT>bidirectionalS</TT> selector means we want a directed graph with access to both the edges outgoing from each vertex and the edges incoming to each vertex, and the
<TT>color_property</TT> attaches a color property to each vertex of the
graph. The color property will be used in several of the algorithms in
the following sections.
@@ -127,11 +136,10 @@ the following sections.
};
using namespace boost;
typedef adjacency_list&lt;vecS, vecS, directedS,
property&lt;vertex_color_t, default_color_type&gt;,
property&lt;edge_weight_t, int&gt;
typedef adjacency_list&lt;vecS, vecS, bidirectionalS,
property&lt;vertex_color_t, default_color_type&gt;
&gt; Graph;
Graph g(N, used_by, used_by + sizeof(used_by) / sizeof(Edge));
Graph g(used_by, used_by + sizeof(used_by) / sizeof(Edge), N);
typedef graph_traits&lt;Graph&gt;::vertex_descriptor Vertex;
</PRE>
@@ -195,86 +203,42 @@ earliest time that a file can be built assuming that an unlimited
number of files can be built at the same time? The main criteria for
when a file can be built is that all of the files it depends on must
already be built. To simplify things for this example, we'll assume
that each file takes 1 time unit to build (even header files). The
that each file takes 1 time unit to build (even header files). For
parallel compilation, we can build all of the files corresponding to
vertices with no dependencies, e.g., those that have
an <i>in-degree</i> of 0, in the first step. For all other files, the
main observation for determining the ``time slot'' for a file is that
the time slot must be one more than the maximum time-slot of the files
it depends on.
<P>
This idea of calculating a value based on the previously computed
values of neighboring vertices is the same idea behind Dijkstra's
single-source shortest paths algorithm (see <a
href="./dijkstra_shortest_paths.html"><tt>dijkstra_shortest_paths()</tt></a>). The
main difference between this situation and a shortest-path algorithm
is that we want to use the maximum of the neighbors' values instead of
the minimum. In addition, we do not have a single source
vertex. Instead we will want to treat all vertices with in-degree of
zero as sources (i.e., vertices with no edges coming into them). So we
use Dijkstra's algorithm with several extra parameters instead
of relying on the defaults.
<P>
To use <TT>dijkstra_shortest_paths()</TT>, we must first set up the vertex
and edge properties that will be used in the algorithm. We will need
a time property (replacing the distance property of Dijkstra's
algorithm) and an edge weight property. We will use a
<TT>std::vector</TT> to store the time. The weight property has already
been attached to the graph via a plug-in so here we just declare an
map for the internal weight property.
<P>We start be creating a vector <code>time</code> that will store the
time step at which each file can be built. We initialize every value
with time step zero.</p>
<P>
<PRE>
std::vector&lt;int&gt; time(N, 0);
typedef std::vector&lt;int&gt;::iterator Time;
using boost::edge_weight_t;
typedef boost::property_map&lt;Graph, edge_weight_t&gt;::type Weight;
Weight weight = get(edge_weight, g);
</PRE>
<P>
The next step is to identify the vertices with zero in-degree which
will be our ``source'' vertices from which to start the shortest path
searches. The in-degrees can be calculated with the following loop.
<p>Now, we want to visit the vertices against in topological order,
from those files that need to be built first until those that need
to be built last. However, instead of printing out the order
immediately, we will compute the time step in which each file should
be built based on the time steps of the files it depends on. We
only need to consider those files whose in-degree is greater than
zero.</p>
<P>
<PRE>
std::vector&lt;int&gt; in_degree(N, 0);
Graph::vertex_iterator i, iend;
Graph::out_edge_iterator j, jend;
for (boost::tie(i, iend) = vertices(g); i != iend; ++i)
for (boost::tie(j, jend) = out_edges(*i, g); j != jend; ++j)
in_degree[target(*j, g)] += 1;
</PRE>
<P>
Next we need to define comparison of the &quot;cost&quot;. In this
case we want each file to have a time stamp greater than any of its
predecessors. Therefore we define comparison with the
<TT>std::greater&lt;int&gt;</TT> function object. We also need to
tell the algorithm that we want to use addition to combine time
values, so we use <TT>std::plus&lt;int&gt;</TT>.
<P>
<PRE>
std::greater&lt;int&gt; compare;
std::plus&lt;int&gt; combine;
</PRE>
<P>
We are now ready to call <TT>uniform_cost_search()</TT>. We just
loop through all the vertices in the graph, and invoke the algorithm
if the vertex has zero in-degree.
<P>
<PRE>
for (boost::tie(i, iend) = vertices(g); i != iend; ++i)
if (in_degree[*i] == 0)
boost::dijkstra_shortest_paths(g, *i,
distance_map(&amp;time[0]).
weight_map(weight).
distance_compare(compare).
distance_combine(combine));
</PRE>
<pre>
for (i = make_order.begin(); i != make_order.end(); ++i) {
if (in_degree (*i, g) &gt; 0) {
Graph::in_edge_iterator j, j_end;
int maxdist = 0;
for (tie(j, j_end) = in_edges(*i, g); j != j_end; ++j)
maxdist = std::max(time[source(*j, g)], maxdist);
time[*i]=maxdist+1;
}
}
</pre>
<P>
Last, we output the time-slot that we've calculated for each vertex.
@@ -324,9 +288,8 @@ the system will need to report an error to the user so that the cycles
can be removed. One easy way to detect a cycle is to run a <a
href="./depth_first_search.html">depth-first search</a>, and if the
search runs into an already discovered vertex (of the current search
tree), then there is a cycle. An already discovered vertex will have
been colored gray, so we can insert a check for this color in the
depth-first search. The BGL graph search algorithms (which includes
tree), then there is a cycle. The BGL graph search algorithms (which
includes
<TT>depth_first_search()</TT>) are all extensible via the
<I>visitor</I> mechanism. A visitor is similar to a function object,
but it has several methods instead of just the one
@@ -339,9 +302,9 @@ for a detailed description of visitors.
<P>
We will create a visitor class and fill in the <TT>back_edge()</TT>
method, which is the <a href="./DFSVisitor.html">DFSVisitor</a> method
that is called when DFS explores a new edge. This is the place where
we want to place the color check which will determine whether there
are cyclic dependencies. Inheriting from <TT>dfs_visitor&lt;&gt;</TT>
that is called when DFS explores an edge to an already discovered
vertex. A call to this method indicates the existence of a
cycle. Inheriting from <TT>dfs_visitor&lt;&gt;</TT>
provides the visitor with empty versions of the other visitor methods.
Once our visitor is created, we can construct and object and pass it
to the BGL algorithm. Visitor objects are passed by value inside of
@@ -350,21 +313,17 @@ reference in this visitor.
<P>
<PRE>
template &lt;class Color&gt;
struct cycle_detector : public dfs_visitor&lt;&gt;
{
typedef typename boost::property_traits&lt;Color&gt;::value_type C;
cycle_detector(Color c, bool& has_cycle)
: _has_cycle(has_cycle), color(c) { }
cycle_detector( bool&amp; has_cycle)
: _has_cycle(has_cycle) { }
template &lt;class Edge, class Graph&gt;
void back_edge(Edge e, Graph& g) {
void back_edge(Edge, Graph&amp;) {
_has_cycle = true;
}
protected:
bool& _has_cycle;
Color color;
bool&amp; _has_cycle;
};
</PRE>
@@ -375,7 +334,7 @@ algorithm and pass in the cycle detector visitor.
<P>
<PRE>
bool has_cycle = false;
cycle_detector&lt;Color&gt; vis(color, has_cycle);
cycle_detector vis(has_cycle);
boost::depth_first_search(g, visitor(vis));
std::cout &lt;&lt; "The graph has a cycle? " &lt;&lt; has_cycle &lt;&lt; std::endl;
</PRE>
+19 -22
View File
@@ -2,19 +2,15 @@
<!--
-- Copyright (c) Jeremy Siek 2000
--
-- Permission to use, copy, modify, distribute and sell this software
-- and its documentation for any purpose is hereby granted without fee,
-- provided that the above copyright notice appears in all copies and
-- that both that copyright notice and this permission notice appear
-- in supporting documentation. Jeremy Siek makes no
-- representations about the suitability of this software for any
-- purpose. It is provided "as is" without express or implied warranty.
-- 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: Filtered Graph</Title>
<BODY BGCOLOR="#ffffff" LINK="#0000ee" TEXT="#000000" VLINK="#551a8b"
ALINK="#ff0000">
<IMG SRC="../../../c++boost.gif"
<IMG SRC="../../../boost.png"
ALT="C++ Boost" width="277" height="86">
<BR Clear>
@@ -44,7 +40,11 @@ the original graph can be changed through property maps of the
filtered graph. Vertex and edge descriptors of the filtered graph are
the same as, and interchangeable with, the vertex and edge descriptors
of the original graph.
<P>
<P>The <a href="#num_vertices"><tt>num_vertices</tt></a> and <a
href="#num_edges"><tt>num_edges</tt></a> functions do not filter
before returning results, so they return the number of vertices or
edges in the underlying graph, unfiltered <a href="#2">[2]</a>.
<H3>Example</H3>
@@ -398,7 +398,7 @@ Returns the number of edges entering vertex <tt>u</tt>.
<hr>
<pre>
<pre><a name="num_vertices"></a>
vertices_size_type
num_vertices(const filtered_graph&amp; g)
</pre>
@@ -406,11 +406,11 @@ Returns the number of vertices in the underlying graph <a href="#2">[2]</a>.
<hr>
<pre>
<pre><a name="num_edges"></a>
edges_size_type
num_edges(const filtered_graph&amp; g)
</pre>
Returns the number of edges in the graph <tt>g</tt>.
Returns the number of edges in the underlying graph <a href="#2">[2]</a>.
<hr>
@@ -497,16 +497,13 @@ by-value (for performance reasons) in the filter iterator adaptor, and
iterators are required to be Default Constructible by the C++
Standard.
<p>
<a name="2">[2]</a> It would be nicer to return the number of
vertices remaining after the filter has been applied, but
this has two problems. The first is that it would take longer
to calculate, and the second is that it would interact badly
with the underlying vertex index mapping. The index mapping
would no longer fall in the range <tt>[0,num_vertices(g))</tt>
which is assumed in many of the algorithms. We are working
on a solution that will remove that assumption from the
algorithms.
<p> <a name="2">[2]</a> It would be nicer to return the number of
vertices (or edges) remaining after the filter has been applied, but
this has two problems. The first is that it would take longer to
calculate, and the second is that it would interact badly with the
underlying vertex/edge index mappings. The index mapping would no
longer fall in the range <tt>[0,num_vertices(g))</tt> (resp. <tt>[0,
num_edges(g))</tt>) which is assumed in many of the algorithms.
<br>
+167
View File
@@ -0,0 +1,167 @@
<HTML>
<!--
-- Copyright (c) 2002 Rensselaer Polytechnic Institute
--
-- 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>Floyd-Warshall All Pairs Shortest Paths</Title>
<BODY BGCOLOR="#ffffff" LINK="#0000ee" TEXT="#000000" VLINK="#551a8b"
ALINK="#ff0000">
<IMG SRC="../../../boost.png"
ALT="C++ Boost" width="277" height="86">
<BR Clear>
<H1><A NAME="sec:floyd-warshall">
<TT>floyd_warshall_all_pairs_shortest_paths</TT>
</H1>
<PRE><em>// Named parameters version</em>
template &lt;class VertexListGraph, class DistanceMatrix,
class P, class T, class R&gt;
bool floyd_warshall_initialized_all_pairs_shortest_paths(
const VertexListGraph&amp; g, DistanceMatrix&amp; d,
const bgl_named_params&lt;P, T, R&gt;&amp; params)
template &lt;class VertexAndEdgeListGraph, class DistanceMatrix,
class P, class T, class R&gt;
bool floyd_warshall_all_pairs_shortest_paths(
const VertexAndEdgeListGraph&amp; g, DistanceMatrix&amp; d,
const bgl_named_params&lt;P, T, R&gt;&amp; params)
<em>// Positional parameter versions</em>
\begin{verbatim}
template &lt;typename VertexListGraph, typename DistanceMatrix,
typename BinaryPredicate, typename BinaryFunction,
typename Infinity, typename Zero&gt;
bool floyd_warshall_initialized_all_pairs_shortest_paths(
const VertexListGraph&amp; g, DistanceMatrix&amp; d,
const BinaryPredicate&amp; compare, const BinaryFunction&amp; combine,
const Infinity&amp; inf, const Zero&amp; zero)
template &lt;typename VertexAndEdgeListGraph, typename DistanceMatrix,
typename WeightMap, typename BinaryPredicate,
typename BinaryFunction, typename Infinity, typename Zero&gt;
bool floyd_warshall_all_pairs_shortest_paths(
const VertexAndEdgeListGraph&amp; g, DistanceMatrix&amp; d,
const WeightMap&amp; w, const BinaryPredicate&amp; compare,
const BinaryFunction&amp; combine,
const Infinity&amp; inf, const Zero&amp; zero)</PRE>
<P>
These algorithms find the shortest distance between every pair of
vertices in the graph. The algorithms return false if there is a
negative weight cycle in the graph, true otherwise. The shortest
distance between each pair of vertices is stored in the distance
matrix <code>d</code>. The difference between the two algorithms is in
whether the distance matrix is assumed to be initialized or not, as
discussed below under the OUT parameter description.
<P>This algorithm should be used to compute shortest paths between
every pair of vertices for dense graphs. For sparse graphs, use <a
href="johnson_all_pairs_shortest.html"><code>johnson_all_pairs_shortest_paths</code></a>.
<H3>Where Defined</H3>
<P>
<a href="../../../boost/graph/floyd_warshall_shortest.hpp"><TT>boost/graph/floyd_warshall_shortest.hpp</TT></a>
<h3>Parameters</h3>
IN: <code>Graph&amp; g</code>
<blockquote>
A directed or undirected graph. The graph must be a model of <a href="VertexListGraph.html">Vertex List Graph</a> for calls to
<code>floyd_warshall_initialized_all_pairs_shortest_paths</code>, and
<a href="VertexAndEdgeListGraph.html">Vertex And Edge List Graph</a> for calls to
<code>floyd_warshall_all_pairs_shortest_paths</code>.<br>
</blockquote>
OUT: <code>DistanceMatrix&amp; d</code>
<blockquote>
The length of the shortest path between each pair of vertices
<code>u</code>,<code>v</code> are
stored in the matrix at location <code>D[u][v]</code>. The
DistanceMatrix must be
of type <code>{M, I, V}</code> where <code>I</code> is of type
<code>vertex_descriptor</code> and <code>V</code> is the
type of the <code>weight_map</code>. The set of types must be a model of
<a href="BasicMatrix.html">BasicMatrix</a>, with the exceptions that
it isn't required to
run in constant time, and it must be mutable. The matrix must be
properly initialized when it is passed to the function
<code>floyd_warshall_initialized_all_pairs_shortest_paths</code>. If the
function <code>floyd_warshall_all_pairs_shortest_paths</code> is used then the
matrix will be initialized for the user.
</blockquote>
<h3>Named Parameters</h3>
IN: <code>weight_map(WeightMap w)</code>
<blockquote>
The weight of length of each edge in the graph. The <code>WeightMap</code>
must be a model of <a href="../../property_map/ReadablePropertyMap.html">Readable Property
Map</a>. The edge descriptor
type of the graph needs to be usable as the key type for the weight
map. The <code>value_type</code> of the weight map must be the type of the
<code>DistanceMatrix</code>, and must always either be part of the
graph passed to the function, or passed in as a parameter.<br>
<b>Default:</b> <code>get(edge_weight, g)</code>
</blockquote>
IN: <code>distance_compare(CompareFunction cmp)</code>
<blockquote>
The function used to compare distances to determine which target
vertex is closer to the source vertex. The CompareFunction must be a
model of <code>BinaryPredicate</code>. The argument types must match the
value type of the <code>WeightMap</code>.<br>
<b>Default:</b> <code>std::less&lt;WM&gt;</code>with <code>WM = typename property_traits&lt;WeightMap&gt;::value_type</code>
</blockquote>
IN: <code>distance_combine(CombineFunction cmb)</code>
<blockquote>
The function used to combine distance to compute the distance of a
path. The CombineFunction must be a model of <code>BinaryFunction</code>.
The argument types must match the value type of the <code>WeightMap</code>.
The result type must be the same as the distance value type.<br>
<b>Default:</b> <code>std::plus&lt;WM&gt;</code> with <code>WM = typename property_traits&lt;WeightMap&gt;::value_type</code>
</blockquote>
IN: <code>distance_inf(WM inf)</code>
<blockquote>
The value used to initialize the distance for each vertex before
starting the algorithm, and to represent the distance between vertices
for which there is not path. Should be larger than any possible valid
path length. The argument type must match the value type of the <code>
WeightMap</code>.<br>
<b>Default:</b> <code>std::numeric_limits&lt;WM&gt;::max()</code> with <code>WM = typename property_traits&lt;WeightMap&gt;::value_type</code>
</blockquote>
IN: <code>distance_zero(WM zero)</code>
<blockquote>
The value used to represent the distance from a vertex to itself, and
to determine if a value is negative. The argument type must match the
value type of the <code>WeightMap</code>.<br>
<b>Default:</b> <code>0</code>
</blockquote>
<h3>Complexity</h3>
The time complexity is <i>O(V<sup>3</sup>)</i>.
<br>
<HR>
<TABLE>
<TR valign=top>
<TD nowrap>Copyright &copy 2002-2004</TD><TD>
Lauren Foutz, Rensselaer Polytechnic Institute</td>
</tr><tr valign="top"><td></td>
<td>Scott Hill, Rensselaer Polytechnic Institute
</TD></TR></TABLE>
</BODY>
</HTML>
+241
View File
@@ -0,0 +1,241 @@
<HTML>
<!--
-- Copyright (c) 2004 Trustees of Indiana University
--
-- 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: Fruchterman-Reingold Force-Directed Layout</Title>
<BODY BGCOLOR="#ffffff" LINK="#0000ee" TEXT="#000000" VLINK="#551a8b"
ALINK="#ff0000">
<IMG SRC="../../../boost.png"
ALT="C++ Boost" width="277" height="86">
<BR Clear>
<img src="figs/python.gif" alt="(Python)"/>
<TT>fruchterman_reingold_force_directed_layout</TT>
</H1>
<P>
<PRE>
<i>// named parameter version</i>
template&lt;typename Graph, typename PositionMap, typename Dim, typename Param,
typename Tag, typename Rest&gt;
void
fruchterman_reingold_force_directed_layout
(const Graph& g,
PositionMap position,
Dim width,
Dim height,
const bgl_named_params&lt;Param, Tag, Rest&gt;&amp; params);
<i>// non-named parameter version</i>
template&lt;typename Graph, typename PositionMap, typename Dim,
typename AttractiveForce, typename RepulsiveForce,
typename ForcePairs, typename DisplacementMap, typename Cooling&gt;
void
fruchterman_reingold_force_directed_layout
(const Graph&amp; g,
PositionMap position,
Dim width,
Dim height,
AttractiveForce fa,
RepulsiveForce fr,
ForcePairs fp,
Cooling cool,
DisplacementMap displacement);
template&lt;typename Graph, typename PositionMap, typename Dim&gt;
void
fruchterman_reingold_force_directed_layout(const Graph& g,
PositionMap position,
Dim width,
Dim height);
</PRE>
<P> This algorithm&nbsp;[<A
HREF="bibliography.html#fruchterman91">58</A>] performs layout of
unweighted, undirected graphs. Unlike the <a
href="kamada_kawai_spring_layout.html">Kamada-Kawai</a> layout
algorithm, this algorithm directly supports the layout of disconnected
graphs (but see the <tt>force_pairs</tt> named parameter). It is a
<em>force-directed</em> algorithm, meaning that vertex layout is
determined by the forces pulling vertices together and pushing them
apart. Attractive forces occur between adjacent vertices only, whereas
repulsive forces occur between every pair of vertices. Each iteration
computes the sum of the forces on each vertex, then moves the vertices
to their new positions. The movement of vertices is mitigated by the
<i>temperature</i> of the system for that iteration: as the algorithm
progresses through successive iterations, the temperature should
decrease so that vertices settle in place. The cooling schedule,
attractive forces, and repulsive forces can be provided by the user.
<p> The vertices are often placed randomly prior to execution of this algorithm via <a href="random_layout.html"><tt>random_graph_layout</tt></a>.
<h3>Where Defined</h3>
<a href="../../../boost/graph/fruchterman_reingold.hpp"><tt>boost/graph/fruchterman_reingold.hpp</tt></a>
<h3>Parameters</h3>
IN: <tt>const Graph&amp; g</tt>
<blockquote>
The graph object on which the algorithm will be applied.
The type <tt>Graph</tt> must be a model of
<a href="./VertexAndEdgeListGraph.html">Vertex And Edge List Graph</a>.<br>
<b>Python</b>: This parameter is named <tt>graph</tt> in Python.
</blockquote>
IN/OUT: <tt>PositionMap position</tt>
<blockquote>
The property map that stores the position of each vertex. It should
typically be initialized with the vertices at random locations (use
<a href="random_layout.html"><tt>random_graph_layout</tt></a>). The
type <tt>PositionMap</tt> must be a model of <a
href="../../property_map/LvaluePropertyMap.html">Lvalue Property
Map</a> such that the vertex descriptor type of <tt>Graph</tt> is
convertible to its key type. Its value type must be a structure
with fields <tt>x</tt> and <tt>y</tt>, representing the coordinates
of the vertex.<br>
<b>Python</b>: The position map must be a <tt>vertex_point2d_map</tt> for
the graph.<br>
<b>Python default</b>: <tt>graph.get_vertex_point2d_map("position")</tt>
</blockquote>
IN: <tt>Dim width</tt>
<blockquote>
The width of the display area in which layout should occur. On
termination of the algorithm, the <tt>x</tt> coordinates of all
vertices will fall in <tt>[-width/2, width/2]</tt>.
</blockquote>
IN: <tt>Dim height</tt>
<blockquote>
The height of the display area in which layout should occur. On
termination of the algorithm, the <tt>y</tt> coordinates of all
vertices will fall in <tt>[-height/2, height/2]</tt>.
</blockquote>
<h3>Named Parameters</h3>
IN: <tt>attractive_force(AttractiveForce fa)</tt>
<blockquote>
Computes the magnitude of the attractive force between two adjacent
vertices. The function object <tt>fa</tt> must accept four
parameters: the edge descriptor, <tt>k</tt>, the distance between the
vertices, and the graph. <tt>k</tt> is the square root of the ratio
of the display area to the number of vertices. <br>
<b>Default:</b> <tt>square_distance_attractive_force()</tt>, which
computes the attractive force as <code>dist<sup>2</sup>/k</code>.<br>
<b>Python</b>: Any callable Python object that matches the signature will suffice.
</blockquote>
IN: <tt>repulsive_force(RepulsiveForce fr)</tt>
<blockquote>
Computes the magnitude of the repulsive force between any two
vertices. The function object <tt>fa</tt> must accept five
parameters: the two vertex descriptors, <tt>k</tt>, the distance between the
vertices, and the graph. <tt>k</tt> is the square root of the ratio
of the display area to the number of vertices. <br>
<b>Default:</b> <tt>square_distance_repsulsive_force()</tt>, which
computes the repulsive force as <code>k<sup>2</sup>/dist</code>.<br>
<b>Python</b>: Any callable Python object that matches the signature will suffice.
</blockquote>
IN: <tt>force_pairs(ForcePairs fp)</tt>
<blockquote>
Enumerates the pairs of vertices on which the repulsive force should
be applied. <tt>fp</tt> is a function object taking two parameters:
the graph <tt>g</tt> and a binary function object that should be
passed each pair of vertices to be considered. The basic formulation
of the Fruchterman-Reingold algorithm computes repulsive forces
between all pairs of vertices (pass <tt>all_force_pairs()</tt> for
this parameter), which is functional for disconnected graphs but
tends to push the connected components toward the edges of the
display area. The grid variant of the algorithm places a grid over
the display area and only computes repulsive forces among vertices
within each rectangle in the grid. The grid variant can be more
efficient than the basic formulation and tends to produce better
layouts for disconnected graphs, but is not better overall: pass
<tt>make_grid_force_pairs(width, height, position, g)</tt> as this
parameter to use the grid variant. Other enumeration strategies may
yield better results for particular graphs. <br>
<b>Default:</b> <tt>make_grid_force_pairs(width, height, position, g)</tt><br>
<b>Python</b>: Unsupported parameter.
</blockquote>
IN: <tt>cooling(Cooling cool)</tt>
<blockquote>
Determines the cooling schedule for the algorithm, which affects the
rate of movement of vertices and termination of the algorithm. The
<tt>cool</tt> parameter is a nullary function object (i.e., one that
takes no arguments) and returns the temperature for the current
iteration. When the returned temperature is zero, the algorithm
terminates. Cooling schedules should begin with some initial
temperature and gradually reduce the temperature to zero.<br>
<b>Default:</b> <tt>linear_cooling&lt;double&gt;(100)</tt><br>
<b>Python</b>: Any callable Python object that matches the signature will suffice.
</blockquote>
UTIL: <tt>displacement_map(DisplacementMap displacement)</tt>
<blockquote>
The displacement map is used to compute the amount by which each
vertex will move in each step. The <tt>DisplacementMap</tt> type
carries the same requirements as the <tt>PositionMap</tt> type.<br>
<b>Default:</b> An <tt>iterator_property_map</tt> with a value type
of <tt>simple_point&lt;double&gt;</tt> and using the given vertex index map.<br>
<b>Python:</b> Unsupported parameter.
</blockquote>
IN: <tt>vertex_index_map(VertexIndexMap i_map)</tt>
<blockquote>
This maps each vertex to an integer in the range <tt>[0,
num_vertices(g))</tt>. This is only necessary when no
displacement map is provided.
The type <tt>VertexIndexMap</tt> must be a model of <a
href="../../property_map/ReadablePropertyMap.html">Readable Property
Map</a>. The value type of the map must be an integer type. The
vertex descriptor type of the graph needs to be usable as the key
type of the map.<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
not have an internal <tt>vertex_index</tt> property.
<br>
<b>Python:</b> Unsupported parameter.
</blockquote>
<b>Python</b> IN: <tt>bool progressive</tt>
<blockquote>
When <tt>false</tt>, performs a random layout of the graph before
running the Fruchterman-Reingold algorithm. If <tt>true</tt>, the
algorithm is executing starting with the vertex configuration in
the <tt>position</tt> map.<br>
<b>Default</b>: <tt>False</tt>.
</blockquote>
<H3>Complexity</H3>
<P> The time complexity is <i>O(|V|<sup>2</sup> + |E|)</i> for each
iteration of the algorithm in the worse case. The average case for the
grid variant is <i>O(|V| + |E|)</i>. The number of iterations is
determined by the cooling schedule.
<H3>Example</H3>
<a href="../example/fr_layout.cpp">libs/graph/example/fr_layout.cpp</a>
<br>
<HR>
<TABLE>
<TR valign=top>
<TD nowrap>Copyright &copy 2004</TD><TD>
<A HREF="../../../people/doug_gregor.html">Doug Gregor</A>, Indiana University
</TD></TR></TABLE>
</BODY>
</HTML>
+5 -9
View File
@@ -2,19 +2,15 @@
<!--
-- Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 2000
--
-- Permission to use, copy, modify, distribute and sell this software
-- and its documentation for any purpose is hereby granted without fee,
-- provided that the above copyright notice appears in all copies and
-- that both that copyright notice and this permission notice appear
-- in supporting documentation. We make no
-- representations about the suitability of this software for any
-- purpose. It is provided "as is" without express or implied warranty.
-- 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>Graph Coloring Example</Title>
<BODY BGCOLOR="#ffffff" LINK="#0000ee" TEXT="#000000" VLINK="#551a8b"
ALINK="#ff0000">
<IMG SRC="../../../c++boost.gif"
<IMG SRC="../../../boost.png"
ALT="C++ Boost" width="277" height="86">
<BR Clear>
@@ -121,7 +117,7 @@ namespace boost {
void
smallest_last_ordering(const VertexListGraph&amp; G, Order order,
Degree degree, Marker marker,
BucketSorter&amp; bucket_sorter) {
BucketSorter&amp; degree_buckets) {
typedef typename graph_traits&lt;VertexListGraph&gt; GraphTraits;
typedef typename GraphTraits::vertex_descriptor Vertex;
+4 -8
View File
@@ -2,19 +2,15 @@
<!--
-- Copyright (c) Jeremy Siek 2000
--
-- Permission to use, copy, modify, distribute and sell this software
-- and its documentation for any purpose is hereby granted without fee,
-- provided that the above copyright notice appears in all copies and
-- that both that copyright notice and this permission notice appear
-- in supporting documentation. Silicon Graphics makes no
-- representations about the suitability of this software for any
-- purpose. It is provided "as is" without express or implied warranty.
-- 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 Concepts</Title>
<BODY BGCOLOR="#ffffff" LINK="#0000ee" TEXT="#000000" VLINK="#551a8b"
ALINK="#ff0000">
<IMG SRC="../../../c++boost.gif"
<IMG SRC="../../../boost.png"
ALT="C++ Boost" width="277" height="86">
<BR Clear>
+5 -9
View File
@@ -2,19 +2,15 @@
<!--
-- Copyright (c) Jeremy Siek 2000
--
-- Permission to use, copy, modify, distribute and sell this software
-- and its documentation for any purpose is hereby granted without fee,
-- provided that the above copyright notice appears in all copies and
-- that both that copyright notice and this permission notice appear
-- in supporting documentation. Silicon Graphics makes no
-- representations about the suitability of this software for any
-- purpose. It is provided "as is" without express or implied warranty.
-- 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: Graph Theory Review</Title>
<BODY BGCOLOR="#ffffff" LINK="#0000ee" TEXT="#000000" VLINK="#551a8b"
ALINK="#ff0000">
<IMG SRC="../../../c++boost.gif"
<IMG SRC="../../../boost.png"
ALT="C++ Boost" width="277" height="86">
<BR Clear>
@@ -29,7 +25,7 @@ the reader has some previous acquaintance with graph algorithms, this
chapter should be enough to get started. If the reader has no
previous background in graph algorithms we suggest a more thorough
introduction such as <a
href="http://www.toc.lcs.mit.edu/~clr/">Introduction to Algorithms</a>
href="http://toc.lcs.mit.edu/~clr/">Introduction to Algorithms</a>
by Cormen, Leiserson, and Rivest.
<P>
+4 -8
View File
@@ -2,19 +2,15 @@
<!--
-- Copyright (c) Jeremy Siek, Lie-Quan Lee, and Andrew Lumsdaine 2000
--
-- Permission to use, copy, modify, distribute and sell this software
-- and its documentation for any purpose is hereby granted without fee,
-- provided that the above copyright notice appears in all copies and
-- that both that copyright notice and this permission notice appear
-- in supporting documentation. We make no
-- representations about the suitability of this software for any
-- purpose. It is provided "as is" without express or implied warranty.
-- 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: Graph Traits</Title>
<BODY BGCOLOR="#ffffff" LINK="#0000ee" TEXT="#000000" VLINK="#551a8b"
ALINK="#ff0000">
<IMG SRC="../../../c++boost.gif"
<IMG SRC="../../../boost.png"
ALT="C++ Boost" width="277" height="86">
<BR Clear>

Some files were not shown because too many files have changed in this diff Show More