dijkstra_cc.cpp 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. //=======================================================================
  2. // Copyright 2002 Indiana University.
  3. // Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek
  4. //
  5. // Distributed under the Boost Software License, Version 1.0. (See
  6. // accompanying file LICENSE_1_0.txt or copy at
  7. // http://www.boost.org/LICENSE_1_0.txt)
  8. //=======================================================================
  9. #include <boost/config.hpp>
  10. #include <boost/concept_archetype.hpp>
  11. #include <boost/graph/dijkstra_shortest_paths.hpp>
  12. #include <boost/graph/dijkstra_shortest_paths_no_color_map.hpp>
  13. #include <boost/graph/graph_archetypes.hpp>
  14. typedef boost::default_constructible_archetype<
  15. boost::sgi_assignable_archetype<> > dist_value;
  16. // So generate_infinity works...
  17. namespace std {
  18. template <>
  19. class numeric_limits<dist_value> {
  20. public:
  21. static dist_value max BOOST_PREVENT_MACRO_SUBSTITUTION () {
  22. return boost::static_object<dist_value>::get();
  23. }
  24. };
  25. }
  26. dist_value abs(const dist_value& x) { return x; }
  27. std::size_t abs(std::size_t x) { return x; }
  28. int main()
  29. {
  30. using namespace boost;
  31. typedef default_constructible_archetype<
  32. sgi_assignable_archetype<
  33. equality_comparable_archetype<> > > vertex_t;
  34. {
  35. typedef incidence_graph_archetype<vertex_t, directed_tag,
  36. allow_parallel_edge_tag> IncidenceGraph;
  37. typedef vertex_list_graph_archetype<vertex_t, directed_tag,
  38. allow_parallel_edge_tag, IncidenceGraph> graph_t;
  39. graph_t& g = static_object<graph_t>::get();
  40. vertex_t s;
  41. typedef graph_traits<graph_t>::edge_descriptor edge_t;
  42. readable_property_map_archetype<edge_t, std::size_t> weight;
  43. readable_property_map_archetype<vertex_t, int> index;
  44. read_write_property_map_archetype<vertex_t, std::size_t> distance;
  45. dijkstra_shortest_paths(g, s,
  46. vertex_index_map(index).
  47. weight_map(weight).
  48. distance_map(distance));
  49. dijkstra_shortest_paths_no_color_map(g, s,
  50. vertex_index_map(index).
  51. weight_map(weight).
  52. distance_map(distance));
  53. }
  54. {
  55. typedef incidence_graph_archetype<vertex_t, directed_tag,
  56. allow_parallel_edge_tag> IncidenceGraph;
  57. typedef vertex_list_graph_archetype<vertex_t, directed_tag,
  58. allow_parallel_edge_tag, IncidenceGraph> Graph;
  59. vertex_t s;
  60. typedef graph_traits<Graph>::edge_descriptor edge_t;
  61. readable_property_map_archetype<edge_t, std::size_t> weight;
  62. typedef property_graph_archetype<Graph, vertex_index_t, std::size_t>
  63. graph_t;
  64. graph_t& g = static_object<graph_t>::get();
  65. read_write_property_map_archetype<vertex_t, vertex_t> pred;
  66. dijkstra_shortest_paths(g, s,
  67. predecessor_map(pred).
  68. weight_map(weight));
  69. dijkstra_shortest_paths_no_color_map(g, s,
  70. predecessor_map(pred).
  71. weight_map(weight));
  72. }
  73. {
  74. typedef incidence_graph_archetype<vertex_t, directed_tag,
  75. allow_parallel_edge_tag> IncidenceGraph;
  76. typedef vertex_list_graph_archetype<vertex_t, directed_tag,
  77. allow_parallel_edge_tag, IncidenceGraph> Graph;
  78. vertex_t s;
  79. typedef property_graph_archetype<Graph, edge_weight_t, std::size_t>
  80. graph_t;
  81. graph_t& g = static_object<graph_t>::get();
  82. read_write_property_map_archetype<vertex_t, vertex_t> pred;
  83. readable_property_map_archetype<vertex_t, int> index;
  84. dijkstra_shortest_paths(g, s,
  85. predecessor_map(pred).
  86. vertex_index_map(index));
  87. dijkstra_shortest_paths_no_color_map(g, s,
  88. predecessor_map(pred).
  89. vertex_index_map(index));
  90. }
  91. {
  92. typedef incidence_graph_archetype<vertex_t, directed_tag,
  93. allow_parallel_edge_tag> IncidenceGraph;
  94. typedef vertex_list_graph_archetype<vertex_t, directed_tag,
  95. allow_parallel_edge_tag, IncidenceGraph> graph_t;
  96. graph_t& g = static_object<graph_t>::get();
  97. vertex_t s;
  98. typedef graph_traits<graph_t>::edge_descriptor edge_t;
  99. readable_property_map_archetype<edge_t, dist_value> weight;
  100. readable_property_map_archetype<vertex_t, int> index;
  101. read_write_property_map_archetype<vertex_t, color_value_archetype> color;
  102. read_write_property_map_archetype<vertex_t, dist_value> distance;
  103. typedef binary_function_archetype<dist_value, dist_value, dist_value>
  104. Combine;
  105. Combine combine = static_object<Combine>::get();
  106. typedef binary_predicate_archetype<dist_value, dist_value>
  107. Compare;
  108. Compare compare = static_object<Compare>::get();
  109. dijkstra_visitor<> vis;
  110. dijkstra_shortest_paths(g, s, color_map(color).
  111. vertex_index_map(index).
  112. weight_map(weight).
  113. distance_map(distance).
  114. distance_combine(combine).
  115. distance_compare(compare).
  116. visitor(vis));
  117. dijkstra_shortest_paths_no_color_map(g, s,
  118. vertex_index_map(index).
  119. weight_map(weight).
  120. distance_map(distance).
  121. distance_combine(combine).
  122. distance_compare(compare).
  123. visitor(vis));
  124. }
  125. return 0;
  126. }