dijkstra_cc.cpp

来自「Boost provides free peer-reviewed portab」· C++ 代码 · 共 115 行

CPP
115
字号
//=======================================================================// Copyright 2002 Indiana University.// Authors: Andrew Lumsdaine, Lie-Quan Lee, Jeremy G. Siek//// 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)//=======================================================================#include <boost/config.hpp>#include <boost/concept_archetype.hpp>#include <boost/graph/dijkstra_shortest_paths.hpp>#include <boost/graph/graph_archetypes.hpp>typedef boost::default_constructible_archetype<  boost::sgi_assignable_archetype<> > dist_value;// So generate_infinity works...namespace std {  template <>  class numeric_limits<dist_value> {  public:    static dist_value max BOOST_PREVENT_MACRO_SUBSTITUTION () {      return boost::static_object<dist_value>::get();     }  };}dist_value abs(const dist_value& x) { return x; }std::size_t abs(std::size_t x) { return x; }int main(){  using namespace boost;  typedef default_constructible_archetype<     sgi_assignable_archetype<    equality_comparable_archetype<> > > vertex_t;  {    typedef incidence_graph_archetype<vertex_t, directed_tag,       allow_parallel_edge_tag> IncidenceGraph;    typedef vertex_list_graph_archetype<vertex_t, directed_tag,       allow_parallel_edge_tag, IncidenceGraph> graph_t;    graph_t& g = static_object<graph_t>::get();    vertex_t s;    typedef graph_traits<graph_t>::edge_descriptor edge_t;    readable_property_map_archetype<edge_t, std::size_t> weight;    readable_property_map_archetype<vertex_t, int> index;    read_write_property_map_archetype<vertex_t, std::size_t> distance;    dijkstra_shortest_paths(g, s,                             vertex_index_map(index).                            weight_map(weight).                            distance_map(distance));  }  {    typedef incidence_graph_archetype<vertex_t, directed_tag,       allow_parallel_edge_tag> IncidenceGraph;    typedef vertex_list_graph_archetype<vertex_t, directed_tag,       allow_parallel_edge_tag, IncidenceGraph> Graph;    vertex_t s;    typedef graph_traits<Graph>::edge_descriptor edge_t;    readable_property_map_archetype<edge_t, std::size_t> weight;    typedef property_graph_archetype<Graph, vertex_index_t, std::size_t>       graph_t;    graph_t& g = static_object<graph_t>::get();    read_write_property_map_archetype<vertex_t, vertex_t> pred;    dijkstra_shortest_paths(g, s,                            predecessor_map(pred).                            weight_map(weight));  }  {    typedef incidence_graph_archetype<vertex_t, directed_tag,       allow_parallel_edge_tag> IncidenceGraph;    typedef vertex_list_graph_archetype<vertex_t, directed_tag,       allow_parallel_edge_tag, IncidenceGraph> Graph;    vertex_t s;    typedef property_graph_archetype<Graph, edge_weight_t, std::size_t>       graph_t;    graph_t& g = static_object<graph_t>::get();    read_write_property_map_archetype<vertex_t, vertex_t> pred;    readable_property_map_archetype<vertex_t, int> index;    dijkstra_shortest_paths(g, s,                            predecessor_map(pred).                            vertex_index_map(index));  }  {    typedef incidence_graph_archetype<vertex_t, directed_tag,       allow_parallel_edge_tag> IncidenceGraph;    typedef vertex_list_graph_archetype<vertex_t, directed_tag,       allow_parallel_edge_tag, IncidenceGraph> graph_t;    graph_t& g = static_object<graph_t>::get();    vertex_t s;    typedef graph_traits<graph_t>::edge_descriptor edge_t;    readable_property_map_archetype<edge_t, dist_value> weight;    readable_property_map_archetype<vertex_t, int> index;    read_write_property_map_archetype<vertex_t, color_value_archetype> color;    read_write_property_map_archetype<vertex_t, dist_value> distance;    typedef binary_function_archetype<dist_value, dist_value, dist_value>       Combine;    Combine combine = static_object<Combine>::get();    typedef binary_predicate_archetype<dist_value, dist_value>      Compare;    Compare compare = static_object<Compare>::get();    dijkstra_visitor<> vis;    dijkstra_shortest_paths(g, s, color_map(color).                            vertex_index_map(index).                            weight_map(weight).                            distance_map(distance).                            distance_combine(combine).                            distance_compare(compare).                            visitor(vis));  }  return 0;}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?