0
4
0
| ... | ... |
@@ -44,13 +44,13 @@ |
| 44 | 44 |
|
| 45 | 45 |
///\brief The type of the map that stores the predecessor |
| 46 | 46 |
///arcs of the shortest paths. |
| 47 | 47 |
/// |
| 48 | 48 |
///The type of the map that stores the predecessor |
| 49 | 49 |
///arcs of the shortest paths. |
| 50 |
///It must |
|
| 50 |
///It must conform to the \ref concepts::WriteMap "WriteMap" concept. |
|
| 51 | 51 |
typedef typename Digraph::template NodeMap<typename Digraph::Arc> PredMap; |
| 52 | 52 |
///Instantiates a \c PredMap. |
| 53 | 53 |
|
| 54 | 54 |
///This function instantiates a \ref PredMap. |
| 55 | 55 |
///\param g is the digraph, to which we would like to define the |
| 56 | 56 |
///\ref PredMap. |
| ... | ... |
@@ -59,13 +59,14 @@ |
| 59 | 59 |
return new PredMap(g); |
| 60 | 60 |
} |
| 61 | 61 |
|
| 62 | 62 |
///The type of the map that indicates which nodes are processed. |
| 63 | 63 |
|
| 64 | 64 |
///The type of the map that indicates which nodes are processed. |
| 65 |
///It must |
|
| 65 |
///It must conform to the \ref concepts::WriteMap "WriteMap" concept. |
|
| 66 |
///By default it is a NullMap. |
|
| 66 | 67 |
typedef NullMap<typename Digraph::Node,bool> ProcessedMap; |
| 67 | 68 |
///Instantiates a \c ProcessedMap. |
| 68 | 69 |
|
| 69 | 70 |
///This function instantiates a \ref ProcessedMap. |
| 70 | 71 |
///\param g is the digraph, to which |
| 71 | 72 |
///we would like to define the \ref ProcessedMap |
| ... | ... |
@@ -78,13 +79,13 @@ |
| 78 | 79 |
return new ProcessedMap(); |
| 79 | 80 |
} |
| 80 | 81 |
|
| 81 | 82 |
///The type of the map that indicates which nodes are reached. |
| 82 | 83 |
|
| 83 | 84 |
///The type of the map that indicates which nodes are reached. |
| 84 |
///It must |
|
| 85 |
///It must conform to the \ref concepts::ReadWriteMap "ReadWriteMap" concept. |
|
| 85 | 86 |
typedef typename Digraph::template NodeMap<bool> ReachedMap; |
| 86 | 87 |
///Instantiates a \c ReachedMap. |
| 87 | 88 |
|
| 88 | 89 |
///This function instantiates a \ref ReachedMap. |
| 89 | 90 |
///\param g is the digraph, to which |
| 90 | 91 |
///we would like to define the \ref ReachedMap. |
| ... | ... |
@@ -93,13 +94,13 @@ |
| 93 | 94 |
return new ReachedMap(g); |
| 94 | 95 |
} |
| 95 | 96 |
|
| 96 | 97 |
///The type of the map that stores the distances of the nodes. |
| 97 | 98 |
|
| 98 | 99 |
///The type of the map that stores the distances of the nodes. |
| 99 |
///It must |
|
| 100 |
///It must conform to the \ref concepts::WriteMap "WriteMap" concept. |
|
| 100 | 101 |
typedef typename Digraph::template NodeMap<int> DistMap; |
| 101 | 102 |
///Instantiates a \c DistMap. |
| 102 | 103 |
|
| 103 | 104 |
///This function instantiates a \ref DistMap. |
| 104 | 105 |
///\param g is the digraph, to which we would like to define the |
| 105 | 106 |
///\ref DistMap. |
| ... | ... |
@@ -222,13 +223,13 @@ |
| 222 | 223 |
}; |
| 223 | 224 |
///\brief \ref named-templ-param "Named parameter" for setting |
| 224 | 225 |
///\c PredMap type. |
| 225 | 226 |
/// |
| 226 | 227 |
///\ref named-templ-param "Named parameter" for setting |
| 227 | 228 |
///\c PredMap type. |
| 228 |
///It must |
|
| 229 |
///It must conform to the \ref concepts::WriteMap "WriteMap" concept. |
|
| 229 | 230 |
template <class T> |
| 230 | 231 |
struct SetPredMap : public Bfs< Digraph, SetPredMapTraits<T> > {
|
| 231 | 232 |
typedef Bfs< Digraph, SetPredMapTraits<T> > Create; |
| 232 | 233 |
}; |
| 233 | 234 |
|
| 234 | 235 |
template <class T> |
| ... | ... |
@@ -242,13 +243,13 @@ |
| 242 | 243 |
}; |
| 243 | 244 |
///\brief \ref named-templ-param "Named parameter" for setting |
| 244 | 245 |
///\c DistMap type. |
| 245 | 246 |
/// |
| 246 | 247 |
///\ref named-templ-param "Named parameter" for setting |
| 247 | 248 |
///\c DistMap type. |
| 248 |
///It must |
|
| 249 |
///It must conform to the \ref concepts::WriteMap "WriteMap" concept. |
|
| 249 | 250 |
template <class T> |
| 250 | 251 |
struct SetDistMap : public Bfs< Digraph, SetDistMapTraits<T> > {
|
| 251 | 252 |
typedef Bfs< Digraph, SetDistMapTraits<T> > Create; |
| 252 | 253 |
}; |
| 253 | 254 |
|
| 254 | 255 |
template <class T> |
| ... | ... |
@@ -262,13 +263,13 @@ |
| 262 | 263 |
}; |
| 263 | 264 |
///\brief \ref named-templ-param "Named parameter" for setting |
| 264 | 265 |
///\c ReachedMap type. |
| 265 | 266 |
/// |
| 266 | 267 |
///\ref named-templ-param "Named parameter" for setting |
| 267 | 268 |
///\c ReachedMap type. |
| 268 |
///It must |
|
| 269 |
///It must conform to the \ref concepts::ReadWriteMap "ReadWriteMap" concept. |
|
| 269 | 270 |
template <class T> |
| 270 | 271 |
struct SetReachedMap : public Bfs< Digraph, SetReachedMapTraits<T> > {
|
| 271 | 272 |
typedef Bfs< Digraph, SetReachedMapTraits<T> > Create; |
| 272 | 273 |
}; |
| 273 | 274 |
|
| 274 | 275 |
template <class T> |
| ... | ... |
@@ -282,13 +283,13 @@ |
| 282 | 283 |
}; |
| 283 | 284 |
///\brief \ref named-templ-param "Named parameter" for setting |
| 284 | 285 |
///\c ProcessedMap type. |
| 285 | 286 |
/// |
| 286 | 287 |
///\ref named-templ-param "Named parameter" for setting |
| 287 | 288 |
///\c ProcessedMap type. |
| 288 |
///It must |
|
| 289 |
///It must conform to the \ref concepts::WriteMap "WriteMap" concept. |
|
| 289 | 290 |
template <class T> |
| 290 | 291 |
struct SetProcessedMap : public Bfs< Digraph, SetProcessedMapTraits<T> > {
|
| 291 | 292 |
typedef Bfs< Digraph, SetProcessedMapTraits<T> > Create; |
| 292 | 293 |
}; |
| 293 | 294 |
|
| 294 | 295 |
struct SetStandardProcessedMapTraits : public Traits {
|
| ... | ... |
@@ -734,56 +735,58 @@ |
| 734 | 735 |
///functions.\n |
| 735 | 736 |
///Either \ref run(Node) "run()" or \ref start() should be called |
| 736 | 737 |
///before using them. |
| 737 | 738 |
|
| 738 | 739 |
///@{
|
| 739 | 740 |
|
| 740 |
///The shortest path to |
|
| 741 |
///The shortest path to the given node. |
|
| 741 | 742 |
|
| 742 |
///Returns the shortest path to |
|
| 743 |
///Returns the shortest path to the given node from the root(s). |
|
| 743 | 744 |
/// |
| 744 | 745 |
///\warning \c t should be reached from the root(s). |
| 745 | 746 |
/// |
| 746 | 747 |
///\pre Either \ref run(Node) "run()" or \ref init() |
| 747 | 748 |
///must be called before using this function. |
| 748 | 749 |
Path path(Node t) const { return Path(*G, *_pred, t); }
|
| 749 | 750 |
|
| 750 |
///The distance of |
|
| 751 |
///The distance of the given node from the root(s). |
|
| 751 | 752 |
|
| 752 |
///Returns the distance of |
|
| 753 |
///Returns the distance of the given node from the root(s). |
|
| 753 | 754 |
/// |
| 754 | 755 |
///\warning If node \c v is not reached from the root(s), then |
| 755 | 756 |
///the return value of this function is undefined. |
| 756 | 757 |
/// |
| 757 | 758 |
///\pre Either \ref run(Node) "run()" or \ref init() |
| 758 | 759 |
///must be called before using this function. |
| 759 | 760 |
int dist(Node v) const { return (*_dist)[v]; }
|
| 760 | 761 |
|
| 761 |
///Returns the 'previous arc' of the shortest path tree for a node. |
|
| 762 |
|
|
| 762 |
///\brief Returns the 'previous arc' of the shortest path tree for |
|
| 763 |
///the given node. |
|
| 764 |
/// |
|
| 763 | 765 |
///This function returns the 'previous arc' of the shortest path |
| 764 | 766 |
///tree for the node \c v, i.e. it returns the last arc of a |
| 765 | 767 |
///shortest path from a root to \c v. It is \c INVALID if \c v |
| 766 | 768 |
///is not reached from the root(s) or if \c v is a root. |
| 767 | 769 |
/// |
| 768 | 770 |
///The shortest path tree used here is equal to the shortest path |
| 769 |
///tree used in \ref predNode(). |
|
| 771 |
///tree used in \ref predNode() and \ref predMap(). |
|
| 770 | 772 |
/// |
| 771 | 773 |
///\pre Either \ref run(Node) "run()" or \ref init() |
| 772 | 774 |
///must be called before using this function. |
| 773 | 775 |
Arc predArc(Node v) const { return (*_pred)[v];}
|
| 774 | 776 |
|
| 775 |
///Returns the 'previous node' of the shortest path tree for a node. |
|
| 776 |
|
|
| 777 |
///\brief Returns the 'previous node' of the shortest path tree for |
|
| 778 |
///the given node. |
|
| 779 |
/// |
|
| 777 | 780 |
///This function returns the 'previous node' of the shortest path |
| 778 | 781 |
///tree for the node \c v, i.e. it returns the last but one node |
| 779 |
/// |
|
| 782 |
///of a shortest path from a root to \c v. It is \c INVALID |
|
| 780 | 783 |
///if \c v is not reached from the root(s) or if \c v is a root. |
| 781 | 784 |
/// |
| 782 | 785 |
///The shortest path tree used here is equal to the shortest path |
| 783 |
///tree used in \ref predArc(). |
|
| 786 |
///tree used in \ref predArc() and \ref predMap(). |
|
| 784 | 787 |
/// |
| 785 | 788 |
///\pre Either \ref run(Node) "run()" or \ref init() |
| 786 | 789 |
///must be called before using this function. |
| 787 | 790 |
Node predNode(Node v) const { return (*_pred)[v]==INVALID ? INVALID:
|
| 788 | 791 |
G->source((*_pred)[v]); } |
| 789 | 792 |
|
| ... | ... |
@@ -798,19 +801,19 @@ |
| 798 | 801 |
const DistMap &distMap() const { return *_dist;}
|
| 799 | 802 |
|
| 800 | 803 |
///\brief Returns a const reference to the node map that stores the |
| 801 | 804 |
///predecessor arcs. |
| 802 | 805 |
/// |
| 803 | 806 |
///Returns a const reference to the node map that stores the predecessor |
| 804 |
///arcs, which form the shortest path tree. |
|
| 807 |
///arcs, which form the shortest path tree (forest). |
|
| 805 | 808 |
/// |
| 806 | 809 |
///\pre Either \ref run(Node) "run()" or \ref init() |
| 807 | 810 |
///must be called before using this function. |
| 808 | 811 |
const PredMap &predMap() const { return *_pred;}
|
| 809 | 812 |
|
| 810 |
///Checks if |
|
| 813 |
///Checks if the given node is reached from the root(s). |
|
| 811 | 814 |
|
| 812 | 815 |
///Returns \c true if \c v is reached from the root(s). |
| 813 | 816 |
/// |
| 814 | 817 |
///\pre Either \ref run(Node) "run()" or \ref init() |
| 815 | 818 |
///must be called before using this function. |
| 816 | 819 |
bool reached(Node v) const { return (*_reached)[v]; }
|
| ... | ... |
@@ -830,13 +833,13 @@ |
| 830 | 833 |
|
| 831 | 834 |
///\brief The type of the map that stores the predecessor |
| 832 | 835 |
///arcs of the shortest paths. |
| 833 | 836 |
/// |
| 834 | 837 |
///The type of the map that stores the predecessor |
| 835 | 838 |
///arcs of the shortest paths. |
| 836 |
///It must |
|
| 839 |
///It must conform to the \ref concepts::WriteMap "WriteMap" concept. |
|
| 837 | 840 |
typedef typename Digraph::template NodeMap<typename Digraph::Arc> PredMap; |
| 838 | 841 |
///Instantiates a PredMap. |
| 839 | 842 |
|
| 840 | 843 |
///This function instantiates a PredMap. |
| 841 | 844 |
///\param g is the digraph, to which we would like to define the |
| 842 | 845 |
///PredMap. |
| ... | ... |
@@ -845,13 +848,13 @@ |
| 845 | 848 |
return new PredMap(g); |
| 846 | 849 |
} |
| 847 | 850 |
|
| 848 | 851 |
///The type of the map that indicates which nodes are processed. |
| 849 | 852 |
|
| 850 | 853 |
///The type of the map that indicates which nodes are processed. |
| 851 |
///It must |
|
| 854 |
///It must conform to the \ref concepts::WriteMap "WriteMap" concept. |
|
| 852 | 855 |
///By default it is a NullMap. |
| 853 | 856 |
typedef NullMap<typename Digraph::Node,bool> ProcessedMap; |
| 854 | 857 |
///Instantiates a ProcessedMap. |
| 855 | 858 |
|
| 856 | 859 |
///This function instantiates a ProcessedMap. |
| 857 | 860 |
///\param g is the digraph, to which |
| ... | ... |
@@ -865,13 +868,13 @@ |
| 865 | 868 |
return new ProcessedMap(); |
| 866 | 869 |
} |
| 867 | 870 |
|
| 868 | 871 |
///The type of the map that indicates which nodes are reached. |
| 869 | 872 |
|
| 870 | 873 |
///The type of the map that indicates which nodes are reached. |
| 871 |
///It must |
|
| 874 |
///It must conform to the \ref concepts::ReadWriteMap "ReadWriteMap" concept. |
|
| 872 | 875 |
typedef typename Digraph::template NodeMap<bool> ReachedMap; |
| 873 | 876 |
///Instantiates a ReachedMap. |
| 874 | 877 |
|
| 875 | 878 |
///This function instantiates a ReachedMap. |
| 876 | 879 |
///\param g is the digraph, to which |
| 877 | 880 |
///we would like to define the ReachedMap. |
| ... | ... |
@@ -880,13 +883,13 @@ |
| 880 | 883 |
return new ReachedMap(g); |
| 881 | 884 |
} |
| 882 | 885 |
|
| 883 | 886 |
///The type of the map that stores the distances of the nodes. |
| 884 | 887 |
|
| 885 | 888 |
///The type of the map that stores the distances of the nodes. |
| 886 |
///It must |
|
| 889 |
///It must conform to the \ref concepts::WriteMap "WriteMap" concept. |
|
| 887 | 890 |
typedef typename Digraph::template NodeMap<int> DistMap; |
| 888 | 891 |
///Instantiates a DistMap. |
| 889 | 892 |
|
| 890 | 893 |
///This function instantiates a DistMap. |
| 891 | 894 |
///\param g is the digraph, to which we would like to define |
| 892 | 895 |
///the DistMap |
| ... | ... |
@@ -895,24 +898,20 @@ |
| 895 | 898 |
return new DistMap(g); |
| 896 | 899 |
} |
| 897 | 900 |
|
| 898 | 901 |
///The type of the shortest paths. |
| 899 | 902 |
|
| 900 | 903 |
///The type of the shortest paths. |
| 901 |
///It must |
|
| 904 |
///It must conform to the \ref concepts::Path "Path" concept. |
|
| 902 | 905 |
typedef lemon::Path<Digraph> Path; |
| 903 | 906 |
}; |
| 904 | 907 |
|
| 905 | 908 |
/// Default traits class used by BfsWizard |
| 906 | 909 |
|
| 907 |
/// To make it easier to use Bfs algorithm |
|
| 908 |
/// we have created a wizard class. |
|
| 909 |
/// This \ref BfsWizard class needs default traits, |
|
| 910 |
/// as well as the \ref Bfs class. |
|
| 911 |
/// The \ref BfsWizardBase is a class to be the default traits of the |
|
| 912 |
/// \ref BfsWizard class. |
|
| 910 |
/// Default traits class used by BfsWizard. |
|
| 911 |
/// \tparam GR The type of the digraph. |
|
| 913 | 912 |
template<class GR> |
| 914 | 913 |
class BfsWizardBase : public BfsWizardDefaultTraits<GR> |
| 915 | 914 |
{
|
| 916 | 915 |
|
| 917 | 916 |
typedef BfsWizardDefaultTraits<GR> Base; |
| 918 | 917 |
protected: |
| ... | ... |
@@ -934,13 +933,13 @@ |
| 934 | 933 |
//Pointer to the distance of the target node. |
| 935 | 934 |
int *_di; |
| 936 | 935 |
|
| 937 | 936 |
public: |
| 938 | 937 |
/// Constructor. |
| 939 | 938 |
|
| 940 |
/// This constructor does not require parameters, |
|
| 939 |
/// This constructor does not require parameters, it initiates |
|
| 941 | 940 |
/// all of the attributes to \c 0. |
| 942 | 941 |
BfsWizardBase() : _g(0), _reached(0), _processed(0), _pred(0), |
| 943 | 942 |
_dist(0), _path(0), _di(0) {}
|
| 944 | 943 |
|
| 945 | 944 |
/// Constructor. |
| 946 | 945 |
|
| ... | ... |
@@ -964,30 +963,23 @@ |
| 964 | 963 |
/// which makes it easier to use the algorithm. |
| 965 | 964 |
template<class TR> |
| 966 | 965 |
class BfsWizard : public TR |
| 967 | 966 |
{
|
| 968 | 967 |
typedef TR Base; |
| 969 | 968 |
|
| 970 |
///The type of the digraph the algorithm runs on. |
|
| 971 | 969 |
typedef typename TR::Digraph Digraph; |
| 972 | 970 |
|
| 973 | 971 |
typedef typename Digraph::Node Node; |
| 974 | 972 |
typedef typename Digraph::NodeIt NodeIt; |
| 975 | 973 |
typedef typename Digraph::Arc Arc; |
| 976 | 974 |
typedef typename Digraph::OutArcIt OutArcIt; |
| 977 | 975 |
|
| 978 |
///\brief The type of the map that stores the predecessor |
|
| 979 |
///arcs of the shortest paths. |
|
| 980 | 976 |
typedef typename TR::PredMap PredMap; |
| 981 |
///\brief The type of the map that stores the distances of the nodes. |
|
| 982 | 977 |
typedef typename TR::DistMap DistMap; |
| 983 |
///\brief The type of the map that indicates which nodes are reached. |
|
| 984 | 978 |
typedef typename TR::ReachedMap ReachedMap; |
| 985 |
///\brief The type of the map that indicates which nodes are processed. |
|
| 986 | 979 |
typedef typename TR::ProcessedMap ProcessedMap; |
| 987 |
///The type of the shortest paths |
|
| 988 | 980 |
typedef typename TR::Path Path; |
| 989 | 981 |
|
| 990 | 982 |
public: |
| 991 | 983 |
|
| 992 | 984 |
/// Constructor. |
| 993 | 985 |
BfsWizard() : TR() {}
|
| ... | ... |
@@ -1064,17 +1056,18 @@ |
| 1064 | 1056 |
template<class T> |
| 1065 | 1057 |
struct SetPredMapBase : public Base {
|
| 1066 | 1058 |
typedef T PredMap; |
| 1067 | 1059 |
static PredMap *createPredMap(const Digraph &) { return 0; };
|
| 1068 | 1060 |
SetPredMapBase(const TR &b) : TR(b) {}
|
| 1069 | 1061 |
}; |
| 1070 |
///\brief \ref named-func-param "Named parameter" |
|
| 1071 |
///for setting PredMap object. |
|
| 1062 |
|
|
| 1063 |
///\brief \ref named-templ-param "Named parameter" for setting |
|
| 1064 |
///the predecessor map. |
|
| 1072 | 1065 |
/// |
| 1073 |
///\ref named-func-param "Named parameter" |
|
| 1074 |
///for setting PredMap object. |
|
| 1066 |
///\ref named-templ-param "Named parameter" function for setting |
|
| 1067 |
///the map that stores the predecessor arcs of the nodes. |
|
| 1075 | 1068 |
template<class T> |
| 1076 | 1069 |
BfsWizard<SetPredMapBase<T> > predMap(const T &t) |
| 1077 | 1070 |
{
|
| 1078 | 1071 |
Base::_pred=reinterpret_cast<void*>(const_cast<T*>(&t)); |
| 1079 | 1072 |
return BfsWizard<SetPredMapBase<T> >(*this); |
| 1080 | 1073 |
} |
| ... | ... |
@@ -1082,17 +1075,18 @@ |
| 1082 | 1075 |
template<class T> |
| 1083 | 1076 |
struct SetReachedMapBase : public Base {
|
| 1084 | 1077 |
typedef T ReachedMap; |
| 1085 | 1078 |
static ReachedMap *createReachedMap(const Digraph &) { return 0; };
|
| 1086 | 1079 |
SetReachedMapBase(const TR &b) : TR(b) {}
|
| 1087 | 1080 |
}; |
| 1088 |
///\brief \ref named-func-param "Named parameter" |
|
| 1089 |
///for setting ReachedMap object. |
|
| 1081 |
|
|
| 1082 |
///\brief \ref named-templ-param "Named parameter" for setting |
|
| 1083 |
///the reached map. |
|
| 1090 | 1084 |
/// |
| 1091 |
/// \ref named-func-param "Named parameter" |
|
| 1092 |
///for setting ReachedMap object. |
|
| 1085 |
///\ref named-templ-param "Named parameter" function for setting |
|
| 1086 |
///the map that indicates which nodes are reached. |
|
| 1093 | 1087 |
template<class T> |
| 1094 | 1088 |
BfsWizard<SetReachedMapBase<T> > reachedMap(const T &t) |
| 1095 | 1089 |
{
|
| 1096 | 1090 |
Base::_reached=reinterpret_cast<void*>(const_cast<T*>(&t)); |
| 1097 | 1091 |
return BfsWizard<SetReachedMapBase<T> >(*this); |
| 1098 | 1092 |
} |
| ... | ... |
@@ -1100,17 +1094,19 @@ |
| 1100 | 1094 |
template<class T> |
| 1101 | 1095 |
struct SetDistMapBase : public Base {
|
| 1102 | 1096 |
typedef T DistMap; |
| 1103 | 1097 |
static DistMap *createDistMap(const Digraph &) { return 0; };
|
| 1104 | 1098 |
SetDistMapBase(const TR &b) : TR(b) {}
|
| 1105 | 1099 |
}; |
| 1106 |
///\brief \ref named-func-param "Named parameter" |
|
| 1107 |
///for setting DistMap object. |
|
| 1100 |
|
|
| 1101 |
///\brief \ref named-templ-param "Named parameter" for setting |
|
| 1102 |
///the distance map. |
|
| 1108 | 1103 |
/// |
| 1109 |
/// \ref named-func-param "Named parameter" |
|
| 1110 |
///for setting DistMap object. |
|
| 1104 |
///\ref named-templ-param "Named parameter" function for setting |
|
| 1105 |
///the map that stores the distances of the nodes calculated |
|
| 1106 |
///by the algorithm. |
|
| 1111 | 1107 |
template<class T> |
| 1112 | 1108 |
BfsWizard<SetDistMapBase<T> > distMap(const T &t) |
| 1113 | 1109 |
{
|
| 1114 | 1110 |
Base::_dist=reinterpret_cast<void*>(const_cast<T*>(&t)); |
| 1115 | 1111 |
return BfsWizard<SetDistMapBase<T> >(*this); |
| 1116 | 1112 |
} |
| ... | ... |
@@ -1118,17 +1114,18 @@ |
| 1118 | 1114 |
template<class T> |
| 1119 | 1115 |
struct SetProcessedMapBase : public Base {
|
| 1120 | 1116 |
typedef T ProcessedMap; |
| 1121 | 1117 |
static ProcessedMap *createProcessedMap(const Digraph &) { return 0; };
|
| 1122 | 1118 |
SetProcessedMapBase(const TR &b) : TR(b) {}
|
| 1123 | 1119 |
}; |
| 1124 |
///\brief \ref named-func-param "Named parameter" |
|
| 1125 |
///for setting ProcessedMap object. |
|
| 1120 |
|
|
| 1121 |
///\brief \ref named-func-param "Named parameter" for setting |
|
| 1122 |
///the processed map. |
|
| 1126 | 1123 |
/// |
| 1127 |
/// \ref named-func-param "Named parameter" |
|
| 1128 |
///for setting ProcessedMap object. |
|
| 1124 |
///\ref named-templ-param "Named parameter" function for setting |
|
| 1125 |
///the map that indicates which nodes are processed. |
|
| 1129 | 1126 |
template<class T> |
| 1130 | 1127 |
BfsWizard<SetProcessedMapBase<T> > processedMap(const T &t) |
| 1131 | 1128 |
{
|
| 1132 | 1129 |
Base::_processed=reinterpret_cast<void*>(const_cast<T*>(&t)); |
| 1133 | 1130 |
return BfsWizard<SetProcessedMapBase<T> >(*this); |
| 1134 | 1131 |
} |
| ... | ... |
@@ -1261,13 +1258,13 @@ |
| 1261 | 1258 |
/// \brief The type of the digraph the algorithm runs on. |
| 1262 | 1259 |
typedef GR Digraph; |
| 1263 | 1260 |
|
| 1264 | 1261 |
/// \brief The type of the map that indicates which nodes are reached. |
| 1265 | 1262 |
/// |
| 1266 | 1263 |
/// The type of the map that indicates which nodes are reached. |
| 1267 |
/// It must |
|
| 1264 |
/// It must conform to the \ref concepts::ReadWriteMap "ReadWriteMap" concept. |
|
| 1268 | 1265 |
typedef typename Digraph::template NodeMap<bool> ReachedMap; |
| 1269 | 1266 |
|
| 1270 | 1267 |
/// \brief Instantiates a ReachedMap. |
| 1271 | 1268 |
/// |
| 1272 | 1269 |
/// This function instantiates a ReachedMap. |
| 1273 | 1270 |
/// \param digraph is the digraph, to which |
| ... | ... |
@@ -1732,13 +1729,13 @@ |
| 1732 | 1729 |
/// functions.\n |
| 1733 | 1730 |
/// Either \ref run(Node) "run()" or \ref start() should be called |
| 1734 | 1731 |
/// before using them. |
| 1735 | 1732 |
|
| 1736 | 1733 |
///@{
|
| 1737 | 1734 |
|
| 1738 |
/// \brief Checks if |
|
| 1735 |
/// \brief Checks if the given node is reached from the root(s). |
|
| 1739 | 1736 |
/// |
| 1740 | 1737 |
/// Returns \c true if \c v is reached from the root(s). |
| 1741 | 1738 |
/// |
| 1742 | 1739 |
/// \pre Either \ref run(Node) "run()" or \ref init() |
| 1743 | 1740 |
/// must be called before using this function. |
| 1744 | 1741 |
bool reached(Node v) const { return (*_reached)[v]; }
|
| ... | ... |
@@ -44,13 +44,13 @@ |
| 44 | 44 |
|
| 45 | 45 |
///\brief The type of the map that stores the predecessor |
| 46 | 46 |
///arcs of the %DFS paths. |
| 47 | 47 |
/// |
| 48 | 48 |
///The type of the map that stores the predecessor |
| 49 | 49 |
///arcs of the %DFS paths. |
| 50 |
///It must |
|
| 50 |
///It must conform to the \ref concepts::WriteMap "WriteMap" concept. |
|
| 51 | 51 |
typedef typename Digraph::template NodeMap<typename Digraph::Arc> PredMap; |
| 52 | 52 |
///Instantiates a \c PredMap. |
| 53 | 53 |
|
| 54 | 54 |
///This function instantiates a \ref PredMap. |
| 55 | 55 |
///\param g is the digraph, to which we would like to define the |
| 56 | 56 |
///\ref PredMap. |
| ... | ... |
@@ -59,13 +59,14 @@ |
| 59 | 59 |
return new PredMap(g); |
| 60 | 60 |
} |
| 61 | 61 |
|
| 62 | 62 |
///The type of the map that indicates which nodes are processed. |
| 63 | 63 |
|
| 64 | 64 |
///The type of the map that indicates which nodes are processed. |
| 65 |
///It must |
|
| 65 |
///It must conform to the \ref concepts::WriteMap "WriteMap" concept. |
|
| 66 |
///By default it is a NullMap. |
|
| 66 | 67 |
typedef NullMap<typename Digraph::Node,bool> ProcessedMap; |
| 67 | 68 |
///Instantiates a \c ProcessedMap. |
| 68 | 69 |
|
| 69 | 70 |
///This function instantiates a \ref ProcessedMap. |
| 70 | 71 |
///\param g is the digraph, to which |
| 71 | 72 |
///we would like to define the \ref ProcessedMap. |
| ... | ... |
@@ -78,13 +79,13 @@ |
| 78 | 79 |
return new ProcessedMap(); |
| 79 | 80 |
} |
| 80 | 81 |
|
| 81 | 82 |
///The type of the map that indicates which nodes are reached. |
| 82 | 83 |
|
| 83 | 84 |
///The type of the map that indicates which nodes are reached. |
| 84 |
///It must |
|
| 85 |
///It must conform to the \ref concepts::ReadWriteMap "ReadWriteMap" concept. |
|
| 85 | 86 |
typedef typename Digraph::template NodeMap<bool> ReachedMap; |
| 86 | 87 |
///Instantiates a \c ReachedMap. |
| 87 | 88 |
|
| 88 | 89 |
///This function instantiates a \ref ReachedMap. |
| 89 | 90 |
///\param g is the digraph, to which |
| 90 | 91 |
///we would like to define the \ref ReachedMap. |
| ... | ... |
@@ -93,13 +94,13 @@ |
| 93 | 94 |
return new ReachedMap(g); |
| 94 | 95 |
} |
| 95 | 96 |
|
| 96 | 97 |
///The type of the map that stores the distances of the nodes. |
| 97 | 98 |
|
| 98 | 99 |
///The type of the map that stores the distances of the nodes. |
| 99 |
///It must |
|
| 100 |
///It must conform to the \ref concepts::WriteMap "WriteMap" concept. |
|
| 100 | 101 |
typedef typename Digraph::template NodeMap<int> DistMap; |
| 101 | 102 |
///Instantiates a \c DistMap. |
| 102 | 103 |
|
| 103 | 104 |
///This function instantiates a \ref DistMap. |
| 104 | 105 |
///\param g is the digraph, to which we would like to define the |
| 105 | 106 |
///\ref DistMap. |
| ... | ... |
@@ -221,13 +222,13 @@ |
| 221 | 222 |
}; |
| 222 | 223 |
///\brief \ref named-templ-param "Named parameter" for setting |
| 223 | 224 |
///\c PredMap type. |
| 224 | 225 |
/// |
| 225 | 226 |
///\ref named-templ-param "Named parameter" for setting |
| 226 | 227 |
///\c PredMap type. |
| 227 |
///It must |
|
| 228 |
///It must conform to the \ref concepts::WriteMap "WriteMap" concept. |
|
| 228 | 229 |
template <class T> |
| 229 | 230 |
struct SetPredMap : public Dfs<Digraph, SetPredMapTraits<T> > {
|
| 230 | 231 |
typedef Dfs<Digraph, SetPredMapTraits<T> > Create; |
| 231 | 232 |
}; |
| 232 | 233 |
|
| 233 | 234 |
template <class T> |
| ... | ... |
@@ -241,13 +242,13 @@ |
| 241 | 242 |
}; |
| 242 | 243 |
///\brief \ref named-templ-param "Named parameter" for setting |
| 243 | 244 |
///\c DistMap type. |
| 244 | 245 |
/// |
| 245 | 246 |
///\ref named-templ-param "Named parameter" for setting |
| 246 | 247 |
///\c DistMap type. |
| 247 |
///It must |
|
| 248 |
///It must conform to the \ref concepts::WriteMap "WriteMap" concept. |
|
| 248 | 249 |
template <class T> |
| 249 | 250 |
struct SetDistMap : public Dfs< Digraph, SetDistMapTraits<T> > {
|
| 250 | 251 |
typedef Dfs<Digraph, SetDistMapTraits<T> > Create; |
| 251 | 252 |
}; |
| 252 | 253 |
|
| 253 | 254 |
template <class T> |
| ... | ... |
@@ -261,13 +262,13 @@ |
| 261 | 262 |
}; |
| 262 | 263 |
///\brief \ref named-templ-param "Named parameter" for setting |
| 263 | 264 |
///\c ReachedMap type. |
| 264 | 265 |
/// |
| 265 | 266 |
///\ref named-templ-param "Named parameter" for setting |
| 266 | 267 |
///\c ReachedMap type. |
| 267 |
///It must |
|
| 268 |
///It must conform to the \ref concepts::ReadWriteMap "ReadWriteMap" concept. |
|
| 268 | 269 |
template <class T> |
| 269 | 270 |
struct SetReachedMap : public Dfs< Digraph, SetReachedMapTraits<T> > {
|
| 270 | 271 |
typedef Dfs< Digraph, SetReachedMapTraits<T> > Create; |
| 271 | 272 |
}; |
| 272 | 273 |
|
| 273 | 274 |
template <class T> |
| ... | ... |
@@ -281,13 +282,13 @@ |
| 281 | 282 |
}; |
| 282 | 283 |
///\brief \ref named-templ-param "Named parameter" for setting |
| 283 | 284 |
///\c ProcessedMap type. |
| 284 | 285 |
/// |
| 285 | 286 |
///\ref named-templ-param "Named parameter" for setting |
| 286 | 287 |
///\c ProcessedMap type. |
| 287 |
///It must |
|
| 288 |
///It must conform to the \ref concepts::WriteMap "WriteMap" concept. |
|
| 288 | 289 |
template <class T> |
| 289 | 290 |
struct SetProcessedMap : public Dfs< Digraph, SetProcessedMapTraits<T> > {
|
| 290 | 291 |
typedef Dfs< Digraph, SetProcessedMapTraits<T> > Create; |
| 291 | 292 |
}; |
| 292 | 293 |
|
| 293 | 294 |
struct SetStandardProcessedMapTraits : public Traits {
|
| ... | ... |
@@ -666,56 +667,56 @@ |
| 666 | 667 |
///functions.\n |
| 667 | 668 |
///Either \ref run(Node) "run()" or \ref start() should be called |
| 668 | 669 |
///before using them. |
| 669 | 670 |
|
| 670 | 671 |
///@{
|
| 671 | 672 |
|
| 672 |
///The DFS path to |
|
| 673 |
///The DFS path to the given node. |
|
| 673 | 674 |
|
| 674 |
///Returns the DFS path to |
|
| 675 |
///Returns the DFS path to the given node from the root(s). |
|
| 675 | 676 |
/// |
| 676 | 677 |
///\warning \c t should be reached from the root(s). |
| 677 | 678 |
/// |
| 678 | 679 |
///\pre Either \ref run(Node) "run()" or \ref init() |
| 679 | 680 |
///must be called before using this function. |
| 680 | 681 |
Path path(Node t) const { return Path(*G, *_pred, t); }
|
| 681 | 682 |
|
| 682 |
///The distance of |
|
| 683 |
///The distance of the given node from the root(s). |
|
| 683 | 684 |
|
| 684 |
///Returns the distance of |
|
| 685 |
///Returns the distance of the given node from the root(s). |
|
| 685 | 686 |
/// |
| 686 | 687 |
///\warning If node \c v is not reached from the root(s), then |
| 687 | 688 |
///the return value of this function is undefined. |
| 688 | 689 |
/// |
| 689 | 690 |
///\pre Either \ref run(Node) "run()" or \ref init() |
| 690 | 691 |
///must be called before using this function. |
| 691 | 692 |
int dist(Node v) const { return (*_dist)[v]; }
|
| 692 | 693 |
|
| 693 |
///Returns the 'previous arc' of the %DFS tree for |
|
| 694 |
///Returns the 'previous arc' of the %DFS tree for the given node. |
|
| 694 | 695 |
|
| 695 | 696 |
///This function returns the 'previous arc' of the %DFS tree for the |
| 696 | 697 |
///node \c v, i.e. it returns the last arc of a %DFS path from a |
| 697 | 698 |
///root to \c v. It is \c INVALID if \c v is not reached from the |
| 698 | 699 |
///root(s) or if \c v is a root. |
| 699 | 700 |
/// |
| 700 | 701 |
///The %DFS tree used here is equal to the %DFS tree used in |
| 701 |
///\ref predNode(). |
|
| 702 |
///\ref predNode() and \ref predMap(). |
|
| 702 | 703 |
/// |
| 703 | 704 |
///\pre Either \ref run(Node) "run()" or \ref init() |
| 704 | 705 |
///must be called before using this function. |
| 705 | 706 |
Arc predArc(Node v) const { return (*_pred)[v];}
|
| 706 | 707 |
|
| 707 |
///Returns the 'previous node' of the %DFS tree. |
|
| 708 |
///Returns the 'previous node' of the %DFS tree for the given node. |
|
| 708 | 709 |
|
| 709 | 710 |
///This function returns the 'previous node' of the %DFS |
| 710 | 711 |
///tree for the node \c v, i.e. it returns the last but one node |
| 711 |
/// |
|
| 712 |
///of a %DFS path from a root to \c v. It is \c INVALID |
|
| 712 | 713 |
///if \c v is not reached from the root(s) or if \c v is a root. |
| 713 | 714 |
/// |
| 714 | 715 |
///The %DFS tree used here is equal to the %DFS tree used in |
| 715 |
///\ref predArc(). |
|
| 716 |
///\ref predArc() and \ref predMap(). |
|
| 716 | 717 |
/// |
| 717 | 718 |
///\pre Either \ref run(Node) "run()" or \ref init() |
| 718 | 719 |
///must be called before using this function. |
| 719 | 720 |
Node predNode(Node v) const { return (*_pred)[v]==INVALID ? INVALID:
|
| 720 | 721 |
G->source((*_pred)[v]); } |
| 721 | 722 |
|
| ... | ... |
@@ -730,19 +731,19 @@ |
| 730 | 731 |
const DistMap &distMap() const { return *_dist;}
|
| 731 | 732 |
|
| 732 | 733 |
///\brief Returns a const reference to the node map that stores the |
| 733 | 734 |
///predecessor arcs. |
| 734 | 735 |
/// |
| 735 | 736 |
///Returns a const reference to the node map that stores the predecessor |
| 736 |
///arcs, which form the DFS tree. |
|
| 737 |
///arcs, which form the DFS tree (forest). |
|
| 737 | 738 |
/// |
| 738 | 739 |
///\pre Either \ref run(Node) "run()" or \ref init() |
| 739 | 740 |
///must be called before using this function. |
| 740 | 741 |
const PredMap &predMap() const { return *_pred;}
|
| 741 | 742 |
|
| 742 |
///Checks if |
|
| 743 |
///Checks if the given node. node is reached from the root(s). |
|
| 743 | 744 |
|
| 744 | 745 |
///Returns \c true if \c v is reached from the root(s). |
| 745 | 746 |
/// |
| 746 | 747 |
///\pre Either \ref run(Node) "run()" or \ref init() |
| 747 | 748 |
///must be called before using this function. |
| 748 | 749 |
bool reached(Node v) const { return (*_reached)[v]; }
|
| ... | ... |
@@ -762,13 +763,13 @@ |
| 762 | 763 |
|
| 763 | 764 |
///\brief The type of the map that stores the predecessor |
| 764 | 765 |
///arcs of the %DFS paths. |
| 765 | 766 |
/// |
| 766 | 767 |
///The type of the map that stores the predecessor |
| 767 | 768 |
///arcs of the %DFS paths. |
| 768 |
///It must |
|
| 769 |
///It must conform to the \ref concepts::WriteMap "WriteMap" concept. |
|
| 769 | 770 |
typedef typename Digraph::template NodeMap<typename Digraph::Arc> PredMap; |
| 770 | 771 |
///Instantiates a PredMap. |
| 771 | 772 |
|
| 772 | 773 |
///This function instantiates a PredMap. |
| 773 | 774 |
///\param g is the digraph, to which we would like to define the |
| 774 | 775 |
///PredMap. |
| ... | ... |
@@ -777,13 +778,13 @@ |
| 777 | 778 |
return new PredMap(g); |
| 778 | 779 |
} |
| 779 | 780 |
|
| 780 | 781 |
///The type of the map that indicates which nodes are processed. |
| 781 | 782 |
|
| 782 | 783 |
///The type of the map that indicates which nodes are processed. |
| 783 |
///It must |
|
| 784 |
///It must conform to the \ref concepts::WriteMap "WriteMap" concept. |
|
| 784 | 785 |
///By default it is a NullMap. |
| 785 | 786 |
typedef NullMap<typename Digraph::Node,bool> ProcessedMap; |
| 786 | 787 |
///Instantiates a ProcessedMap. |
| 787 | 788 |
|
| 788 | 789 |
///This function instantiates a ProcessedMap. |
| 789 | 790 |
///\param g is the digraph, to which |
| ... | ... |
@@ -797,13 +798,13 @@ |
| 797 | 798 |
return new ProcessedMap(); |
| 798 | 799 |
} |
| 799 | 800 |
|
| 800 | 801 |
///The type of the map that indicates which nodes are reached. |
| 801 | 802 |
|
| 802 | 803 |
///The type of the map that indicates which nodes are reached. |
| 803 |
///It must |
|
| 804 |
///It must conform to the \ref concepts::ReadWriteMap "ReadWriteMap" concept. |
|
| 804 | 805 |
typedef typename Digraph::template NodeMap<bool> ReachedMap; |
| 805 | 806 |
///Instantiates a ReachedMap. |
| 806 | 807 |
|
| 807 | 808 |
///This function instantiates a ReachedMap. |
| 808 | 809 |
///\param g is the digraph, to which |
| 809 | 810 |
///we would like to define the ReachedMap. |
| ... | ... |
@@ -812,13 +813,13 @@ |
| 812 | 813 |
return new ReachedMap(g); |
| 813 | 814 |
} |
| 814 | 815 |
|
| 815 | 816 |
///The type of the map that stores the distances of the nodes. |
| 816 | 817 |
|
| 817 | 818 |
///The type of the map that stores the distances of the nodes. |
| 818 |
///It must |
|
| 819 |
///It must conform to the \ref concepts::WriteMap "WriteMap" concept. |
|
| 819 | 820 |
typedef typename Digraph::template NodeMap<int> DistMap; |
| 820 | 821 |
///Instantiates a DistMap. |
| 821 | 822 |
|
| 822 | 823 |
///This function instantiates a DistMap. |
| 823 | 824 |
///\param g is the digraph, to which we would like to define |
| 824 | 825 |
///the DistMap |
| ... | ... |
@@ -827,24 +828,20 @@ |
| 827 | 828 |
return new DistMap(g); |
| 828 | 829 |
} |
| 829 | 830 |
|
| 830 | 831 |
///The type of the DFS paths. |
| 831 | 832 |
|
| 832 | 833 |
///The type of the DFS paths. |
| 833 |
///It must |
|
| 834 |
///It must conform to the \ref concepts::Path "Path" concept. |
|
| 834 | 835 |
typedef lemon::Path<Digraph> Path; |
| 835 | 836 |
}; |
| 836 | 837 |
|
| 837 | 838 |
/// Default traits class used by DfsWizard |
| 838 | 839 |
|
| 839 |
/// To make it easier to use Dfs algorithm |
|
| 840 |
/// we have created a wizard class. |
|
| 841 |
/// This \ref DfsWizard class needs default traits, |
|
| 842 |
/// as well as the \ref Dfs class. |
|
| 843 |
/// The \ref DfsWizardBase is a class to be the default traits of the |
|
| 844 |
/// \ref DfsWizard class. |
|
| 840 |
/// Default traits class used by DfsWizard. |
|
| 841 |
/// \tparam GR The type of the digraph. |
|
| 845 | 842 |
template<class GR> |
| 846 | 843 |
class DfsWizardBase : public DfsWizardDefaultTraits<GR> |
| 847 | 844 |
{
|
| 848 | 845 |
|
| 849 | 846 |
typedef DfsWizardDefaultTraits<GR> Base; |
| 850 | 847 |
protected: |
| ... | ... |
@@ -866,13 +863,13 @@ |
| 866 | 863 |
//Pointer to the distance of the target node. |
| 867 | 864 |
int *_di; |
| 868 | 865 |
|
| 869 | 866 |
public: |
| 870 | 867 |
/// Constructor. |
| 871 | 868 |
|
| 872 |
/// This constructor does not require parameters, |
|
| 869 |
/// This constructor does not require parameters, it initiates |
|
| 873 | 870 |
/// all of the attributes to \c 0. |
| 874 | 871 |
DfsWizardBase() : _g(0), _reached(0), _processed(0), _pred(0), |
| 875 | 872 |
_dist(0), _path(0), _di(0) {}
|
| 876 | 873 |
|
| 877 | 874 |
/// Constructor. |
| 878 | 875 |
|
| ... | ... |
@@ -896,30 +893,23 @@ |
| 896 | 893 |
/// which makes it easier to use the algorithm. |
| 897 | 894 |
template<class TR> |
| 898 | 895 |
class DfsWizard : public TR |
| 899 | 896 |
{
|
| 900 | 897 |
typedef TR Base; |
| 901 | 898 |
|
| 902 |
///The type of the digraph the algorithm runs on. |
|
| 903 | 899 |
typedef typename TR::Digraph Digraph; |
| 904 | 900 |
|
| 905 | 901 |
typedef typename Digraph::Node Node; |
| 906 | 902 |
typedef typename Digraph::NodeIt NodeIt; |
| 907 | 903 |
typedef typename Digraph::Arc Arc; |
| 908 | 904 |
typedef typename Digraph::OutArcIt OutArcIt; |
| 909 | 905 |
|
| 910 |
///\brief The type of the map that stores the predecessor |
|
| 911 |
///arcs of the DFS paths. |
|
| 912 | 906 |
typedef typename TR::PredMap PredMap; |
| 913 |
///\brief The type of the map that stores the distances of the nodes. |
|
| 914 | 907 |
typedef typename TR::DistMap DistMap; |
| 915 |
///\brief The type of the map that indicates which nodes are reached. |
|
| 916 | 908 |
typedef typename TR::ReachedMap ReachedMap; |
| 917 |
///\brief The type of the map that indicates which nodes are processed. |
|
| 918 | 909 |
typedef typename TR::ProcessedMap ProcessedMap; |
| 919 |
///The type of the DFS paths |
|
| 920 | 910 |
typedef typename TR::Path Path; |
| 921 | 911 |
|
| 922 | 912 |
public: |
| 923 | 913 |
|
| 924 | 914 |
/// Constructor. |
| 925 | 915 |
DfsWizard() : TR() {}
|
| ... | ... |
@@ -996,17 +986,18 @@ |
| 996 | 986 |
template<class T> |
| 997 | 987 |
struct SetPredMapBase : public Base {
|
| 998 | 988 |
typedef T PredMap; |
| 999 | 989 |
static PredMap *createPredMap(const Digraph &) { return 0; };
|
| 1000 | 990 |
SetPredMapBase(const TR &b) : TR(b) {}
|
| 1001 | 991 |
}; |
| 1002 |
///\brief \ref named-func-param "Named parameter" |
|
| 1003 |
///for setting PredMap object. |
|
| 992 |
|
|
| 993 |
///\brief \ref named-templ-param "Named parameter" for setting |
|
| 994 |
///the predecessor map. |
|
| 1004 | 995 |
/// |
| 1005 |
///\ref named-func-param "Named parameter" |
|
| 1006 |
///for setting PredMap object. |
|
| 996 |
///\ref named-templ-param "Named parameter" function for setting |
|
| 997 |
///the map that stores the predecessor arcs of the nodes. |
|
| 1007 | 998 |
template<class T> |
| 1008 | 999 |
DfsWizard<SetPredMapBase<T> > predMap(const T &t) |
| 1009 | 1000 |
{
|
| 1010 | 1001 |
Base::_pred=reinterpret_cast<void*>(const_cast<T*>(&t)); |
| 1011 | 1002 |
return DfsWizard<SetPredMapBase<T> >(*this); |
| 1012 | 1003 |
} |
| ... | ... |
@@ -1014,17 +1005,18 @@ |
| 1014 | 1005 |
template<class T> |
| 1015 | 1006 |
struct SetReachedMapBase : public Base {
|
| 1016 | 1007 |
typedef T ReachedMap; |
| 1017 | 1008 |
static ReachedMap *createReachedMap(const Digraph &) { return 0; };
|
| 1018 | 1009 |
SetReachedMapBase(const TR &b) : TR(b) {}
|
| 1019 | 1010 |
}; |
| 1020 |
///\brief \ref named-func-param "Named parameter" |
|
| 1021 |
///for setting ReachedMap object. |
|
| 1011 |
|
|
| 1012 |
///\brief \ref named-templ-param "Named parameter" for setting |
|
| 1013 |
///the reached map. |
|
| 1022 | 1014 |
/// |
| 1023 |
/// \ref named-func-param "Named parameter" |
|
| 1024 |
///for setting ReachedMap object. |
|
| 1015 |
///\ref named-templ-param "Named parameter" function for setting |
|
| 1016 |
///the map that indicates which nodes are reached. |
|
| 1025 | 1017 |
template<class T> |
| 1026 | 1018 |
DfsWizard<SetReachedMapBase<T> > reachedMap(const T &t) |
| 1027 | 1019 |
{
|
| 1028 | 1020 |
Base::_reached=reinterpret_cast<void*>(const_cast<T*>(&t)); |
| 1029 | 1021 |
return DfsWizard<SetReachedMapBase<T> >(*this); |
| 1030 | 1022 |
} |
| ... | ... |
@@ -1032,17 +1024,19 @@ |
| 1032 | 1024 |
template<class T> |
| 1033 | 1025 |
struct SetDistMapBase : public Base {
|
| 1034 | 1026 |
typedef T DistMap; |
| 1035 | 1027 |
static DistMap *createDistMap(const Digraph &) { return 0; };
|
| 1036 | 1028 |
SetDistMapBase(const TR &b) : TR(b) {}
|
| 1037 | 1029 |
}; |
| 1038 |
///\brief \ref named-func-param "Named parameter" |
|
| 1039 |
///for setting DistMap object. |
|
| 1030 |
|
|
| 1031 |
///\brief \ref named-templ-param "Named parameter" for setting |
|
| 1032 |
///the distance map. |
|
| 1040 | 1033 |
/// |
| 1041 |
/// \ref named-func-param "Named parameter" |
|
| 1042 |
///for setting DistMap object. |
|
| 1034 |
///\ref named-templ-param "Named parameter" function for setting |
|
| 1035 |
///the map that stores the distances of the nodes calculated |
|
| 1036 |
///by the algorithm. |
|
| 1043 | 1037 |
template<class T> |
| 1044 | 1038 |
DfsWizard<SetDistMapBase<T> > distMap(const T &t) |
| 1045 | 1039 |
{
|
| 1046 | 1040 |
Base::_dist=reinterpret_cast<void*>(const_cast<T*>(&t)); |
| 1047 | 1041 |
return DfsWizard<SetDistMapBase<T> >(*this); |
| 1048 | 1042 |
} |
| ... | ... |
@@ -1050,17 +1044,18 @@ |
| 1050 | 1044 |
template<class T> |
| 1051 | 1045 |
struct SetProcessedMapBase : public Base {
|
| 1052 | 1046 |
typedef T ProcessedMap; |
| 1053 | 1047 |
static ProcessedMap *createProcessedMap(const Digraph &) { return 0; };
|
| 1054 | 1048 |
SetProcessedMapBase(const TR &b) : TR(b) {}
|
| 1055 | 1049 |
}; |
| 1056 |
///\brief \ref named-func-param "Named parameter" |
|
| 1057 |
///for setting ProcessedMap object. |
|
| 1050 |
|
|
| 1051 |
///\brief \ref named-func-param "Named parameter" for setting |
|
| 1052 |
///the processed map. |
|
| 1058 | 1053 |
/// |
| 1059 |
/// \ref named-func-param "Named parameter" |
|
| 1060 |
///for setting ProcessedMap object. |
|
| 1054 |
///\ref named-templ-param "Named parameter" function for setting |
|
| 1055 |
///the map that indicates which nodes are processed. |
|
| 1061 | 1056 |
template<class T> |
| 1062 | 1057 |
DfsWizard<SetProcessedMapBase<T> > processedMap(const T &t) |
| 1063 | 1058 |
{
|
| 1064 | 1059 |
Base::_processed=reinterpret_cast<void*>(const_cast<T*>(&t)); |
| 1065 | 1060 |
return DfsWizard<SetProcessedMapBase<T> >(*this); |
| 1066 | 1061 |
} |
| ... | ... |
@@ -1205,13 +1200,13 @@ |
| 1205 | 1200 |
/// \brief The type of the digraph the algorithm runs on. |
| 1206 | 1201 |
typedef GR Digraph; |
| 1207 | 1202 |
|
| 1208 | 1203 |
/// \brief The type of the map that indicates which nodes are reached. |
| 1209 | 1204 |
/// |
| 1210 | 1205 |
/// The type of the map that indicates which nodes are reached. |
| 1211 |
/// It must |
|
| 1206 |
/// It must conform to the \ref concepts::ReadWriteMap "ReadWriteMap" concept. |
|
| 1212 | 1207 |
typedef typename Digraph::template NodeMap<bool> ReachedMap; |
| 1213 | 1208 |
|
| 1214 | 1209 |
/// \brief Instantiates a ReachedMap. |
| 1215 | 1210 |
/// |
| 1216 | 1211 |
/// This function instantiates a ReachedMap. |
| 1217 | 1212 |
/// \param digraph is the digraph, to which |
| ... | ... |
@@ -1617,13 +1612,13 @@ |
| 1617 | 1612 |
/// functions.\n |
| 1618 | 1613 |
/// Either \ref run(Node) "run()" or \ref start() should be called |
| 1619 | 1614 |
/// before using them. |
| 1620 | 1615 |
|
| 1621 | 1616 |
///@{
|
| 1622 | 1617 |
|
| 1623 |
/// \brief Checks if |
|
| 1618 |
/// \brief Checks if the given node is reached from the root(s). |
|
| 1624 | 1619 |
/// |
| 1625 | 1620 |
/// Returns \c true if \c v is reached from the root(s). |
| 1626 | 1621 |
/// |
| 1627 | 1622 |
/// \pre Either \ref run(Node) "run()" or \ref init() |
| 1628 | 1623 |
/// must be called before using this function. |
| 1629 | 1624 |
bool reached(Node v) const { return (*_reached)[v]; }
|
| ... | ... |
@@ -67,15 +67,15 @@ |
| 67 | 67 |
///The type of the digraph the algorithm runs on. |
| 68 | 68 |
typedef GR Digraph; |
| 69 | 69 |
|
| 70 | 70 |
///The type of the map that stores the arc lengths. |
| 71 | 71 |
|
| 72 | 72 |
///The type of the map that stores the arc lengths. |
| 73 |
///It must |
|
| 73 |
///It must conform to the \ref concepts::ReadMap "ReadMap" concept. |
|
| 74 | 74 |
typedef LEN LengthMap; |
| 75 |
///The type of the |
|
| 75 |
///The type of the arc lengths. |
|
| 76 | 76 |
typedef typename LEN::Value Value; |
| 77 | 77 |
|
| 78 | 78 |
/// Operation traits for %Dijkstra algorithm. |
| 79 | 79 |
|
| 80 | 80 |
/// This class defines the operations that are used in the algorithm. |
| 81 | 81 |
/// \see DijkstraDefaultOperationTraits |
| ... | ... |
@@ -113,13 +113,13 @@ |
| 113 | 113 |
|
| 114 | 114 |
///\brief The type of the map that stores the predecessor |
| 115 | 115 |
///arcs of the shortest paths. |
| 116 | 116 |
/// |
| 117 | 117 |
///The type of the map that stores the predecessor |
| 118 | 118 |
///arcs of the shortest paths. |
| 119 |
///It must |
|
| 119 |
///It must conform to the \ref concepts::WriteMap "WriteMap" concept. |
|
| 120 | 120 |
typedef typename Digraph::template NodeMap<typename Digraph::Arc> PredMap; |
| 121 | 121 |
///Instantiates a \c PredMap. |
| 122 | 122 |
|
| 123 | 123 |
///This function instantiates a \ref PredMap. |
| 124 | 124 |
///\param g is the digraph, to which we would like to define the |
| 125 | 125 |
///\ref PredMap. |
| ... | ... |
@@ -128,13 +128,13 @@ |
| 128 | 128 |
return new PredMap(g); |
| 129 | 129 |
} |
| 130 | 130 |
|
| 131 | 131 |
///The type of the map that indicates which nodes are processed. |
| 132 | 132 |
|
| 133 | 133 |
///The type of the map that indicates which nodes are processed. |
| 134 |
///It must |
|
| 134 |
///It must conform to the \ref concepts::WriteMap "WriteMap" concept. |
|
| 135 | 135 |
///By default it is a NullMap. |
| 136 | 136 |
typedef NullMap<typename Digraph::Node,bool> ProcessedMap; |
| 137 | 137 |
///Instantiates a \c ProcessedMap. |
| 138 | 138 |
|
| 139 | 139 |
///This function instantiates a \ref ProcessedMap. |
| 140 | 140 |
///\param g is the digraph, to which |
| ... | ... |
@@ -148,13 +148,13 @@ |
| 148 | 148 |
return new ProcessedMap(); |
| 149 | 149 |
} |
| 150 | 150 |
|
| 151 | 151 |
///The type of the map that stores the distances of the nodes. |
| 152 | 152 |
|
| 153 | 153 |
///The type of the map that stores the distances of the nodes. |
| 154 |
///It must |
|
| 154 |
///It must conform to the \ref concepts::WriteMap "WriteMap" concept. |
|
| 155 | 155 |
typedef typename Digraph::template NodeMap<typename LEN::Value> DistMap; |
| 156 | 156 |
///Instantiates a \c DistMap. |
| 157 | 157 |
|
| 158 | 158 |
///This function instantiates a \ref DistMap. |
| 159 | 159 |
///\param g is the digraph, to which we would like to define |
| 160 | 160 |
///the \ref DistMap. |
| ... | ... |
@@ -166,12 +166,16 @@ |
| 166 | 166 |
|
| 167 | 167 |
///%Dijkstra algorithm class. |
| 168 | 168 |
|
| 169 | 169 |
/// \ingroup shortest_path |
| 170 | 170 |
///This class provides an efficient implementation of the %Dijkstra algorithm. |
| 171 | 171 |
/// |
| 172 |
///The %Dijkstra algorithm solves the single-source shortest path problem |
|
| 173 |
///when all arc lengths are non-negative. If there are negative lengths, |
|
| 174 |
///the BellmanFord algorithm should be used instead. |
|
| 175 |
/// |
|
| 172 | 176 |
///The arc lengths are passed to the algorithm using a |
| 173 | 177 |
///\ref concepts::ReadMap "ReadMap", |
| 174 | 178 |
///so it is easy to change it to any kind of length. |
| 175 | 179 |
///The type of the length is determined by the |
| 176 | 180 |
///\ref concepts::ReadMap::Value "Value" of the length map. |
| 177 | 181 |
///It is also possible to change the underlying priority heap. |
| ... | ... |
@@ -198,13 +202,13 @@ |
| 198 | 202 |
class Dijkstra {
|
| 199 | 203 |
public: |
| 200 | 204 |
|
| 201 | 205 |
///The type of the digraph the algorithm runs on. |
| 202 | 206 |
typedef typename TR::Digraph Digraph; |
| 203 | 207 |
|
| 204 |
///The type of the |
|
| 208 |
///The type of the arc lengths. |
|
| 205 | 209 |
typedef typename TR::LengthMap::Value Value; |
| 206 | 210 |
///The type of the map that stores the arc lengths. |
| 207 | 211 |
typedef typename TR::LengthMap LengthMap; |
| 208 | 212 |
///\brief The type of the map that stores the predecessor arcs of the |
| 209 | 213 |
///shortest paths. |
| 210 | 214 |
typedef typename TR::PredMap PredMap; |
| ... | ... |
@@ -301,13 +305,13 @@ |
| 301 | 305 |
}; |
| 302 | 306 |
///\brief \ref named-templ-param "Named parameter" for setting |
| 303 | 307 |
///\c PredMap type. |
| 304 | 308 |
/// |
| 305 | 309 |
///\ref named-templ-param "Named parameter" for setting |
| 306 | 310 |
///\c PredMap type. |
| 307 |
///It must |
|
| 311 |
///It must conform to the \ref concepts::WriteMap "WriteMap" concept. |
|
| 308 | 312 |
template <class T> |
| 309 | 313 |
struct SetPredMap |
| 310 | 314 |
: public Dijkstra< Digraph, LengthMap, SetPredMapTraits<T> > {
|
| 311 | 315 |
typedef Dijkstra< Digraph, LengthMap, SetPredMapTraits<T> > Create; |
| 312 | 316 |
}; |
| 313 | 317 |
|
| ... | ... |
@@ -322,13 +326,13 @@ |
| 322 | 326 |
}; |
| 323 | 327 |
///\brief \ref named-templ-param "Named parameter" for setting |
| 324 | 328 |
///\c DistMap type. |
| 325 | 329 |
/// |
| 326 | 330 |
///\ref named-templ-param "Named parameter" for setting |
| 327 | 331 |
///\c DistMap type. |
| 328 |
///It must |
|
| 332 |
///It must conform to the \ref concepts::WriteMap "WriteMap" concept. |
|
| 329 | 333 |
template <class T> |
| 330 | 334 |
struct SetDistMap |
| 331 | 335 |
: public Dijkstra< Digraph, LengthMap, SetDistMapTraits<T> > {
|
| 332 | 336 |
typedef Dijkstra< Digraph, LengthMap, SetDistMapTraits<T> > Create; |
| 333 | 337 |
}; |
| 334 | 338 |
|
| ... | ... |
@@ -343,13 +347,13 @@ |
| 343 | 347 |
}; |
| 344 | 348 |
///\brief \ref named-templ-param "Named parameter" for setting |
| 345 | 349 |
///\c ProcessedMap type. |
| 346 | 350 |
/// |
| 347 | 351 |
///\ref named-templ-param "Named parameter" for setting |
| 348 | 352 |
///\c ProcessedMap type. |
| 349 |
///It must |
|
| 353 |
///It must conform to the \ref concepts::WriteMap "WriteMap" concept. |
|
| 350 | 354 |
template <class T> |
| 351 | 355 |
struct SetProcessedMap |
| 352 | 356 |
: public Dijkstra< Digraph, LengthMap, SetProcessedMapTraits<T> > {
|
| 353 | 357 |
typedef Dijkstra< Digraph, LengthMap, SetProcessedMapTraits<T> > Create; |
| 354 | 358 |
}; |
| 355 | 359 |
|
| ... | ... |
@@ -440,12 +444,13 @@ |
| 440 | 444 |
|
| 441 | 445 |
/// \brief \ref named-templ-param "Named parameter" for setting |
| 442 | 446 |
///\c OperationTraits type |
| 443 | 447 |
/// |
| 444 | 448 |
///\ref named-templ-param "Named parameter" for setting |
| 445 | 449 |
///\c OperationTraits type. |
| 450 |
/// For more information see \ref DijkstraDefaultOperationTraits. |
|
| 446 | 451 |
template <class T> |
| 447 | 452 |
struct SetOperationTraits |
| 448 | 453 |
: public Dijkstra<Digraph, LengthMap, SetOperationTraitsTraits<T> > {
|
| 449 | 454 |
typedef Dijkstra<Digraph, LengthMap, SetOperationTraitsTraits<T> > |
| 450 | 455 |
Create; |
| 451 | 456 |
}; |
| ... | ... |
@@ -798,61 +803,63 @@ |
| 798 | 803 |
|
| 799 | 804 |
///@} |
| 800 | 805 |
|
| 801 | 806 |
///\name Query Functions |
| 802 | 807 |
///The results of the %Dijkstra algorithm can be obtained using these |
| 803 | 808 |
///functions.\n |
| 804 |
///Either \ref run(Node) "run()" or \ref |
|
| 809 |
///Either \ref run(Node) "run()" or \ref init() should be called |
|
| 805 | 810 |
///before using them. |
| 806 | 811 |
|
| 807 | 812 |
///@{
|
| 808 | 813 |
|
| 809 |
///The shortest path to |
|
| 814 |
///The shortest path to the given node. |
|
| 810 | 815 |
|
| 811 |
///Returns the shortest path to |
|
| 816 |
///Returns the shortest path to the given node from the root(s). |
|
| 812 | 817 |
/// |
| 813 | 818 |
///\warning \c t should be reached from the root(s). |
| 814 | 819 |
/// |
| 815 | 820 |
///\pre Either \ref run(Node) "run()" or \ref init() |
| 816 | 821 |
///must be called before using this function. |
| 817 | 822 |
Path path(Node t) const { return Path(*G, *_pred, t); }
|
| 818 | 823 |
|
| 819 |
///The distance of |
|
| 824 |
///The distance of the given node from the root(s). |
|
| 820 | 825 |
|
| 821 |
///Returns the distance of |
|
| 826 |
///Returns the distance of the given node from the root(s). |
|
| 822 | 827 |
/// |
| 823 | 828 |
///\warning If node \c v is not reached from the root(s), then |
| 824 | 829 |
///the return value of this function is undefined. |
| 825 | 830 |
/// |
| 826 | 831 |
///\pre Either \ref run(Node) "run()" or \ref init() |
| 827 | 832 |
///must be called before using this function. |
| 828 | 833 |
Value dist(Node v) const { return (*_dist)[v]; }
|
| 829 | 834 |
|
| 830 |
///Returns the 'previous arc' of the shortest path tree for a node. |
|
| 831 |
|
|
| 835 |
///\brief Returns the 'previous arc' of the shortest path tree for |
|
| 836 |
///the given node. |
|
| 837 |
/// |
|
| 832 | 838 |
///This function returns the 'previous arc' of the shortest path |
| 833 | 839 |
///tree for the node \c v, i.e. it returns the last arc of a |
| 834 | 840 |
///shortest path from a root to \c v. It is \c INVALID if \c v |
| 835 | 841 |
///is not reached from the root(s) or if \c v is a root. |
| 836 | 842 |
/// |
| 837 | 843 |
///The shortest path tree used here is equal to the shortest path |
| 838 |
///tree used in \ref predNode(). |
|
| 844 |
///tree used in \ref predNode() and \ref predMap(). |
|
| 839 | 845 |
/// |
| 840 | 846 |
///\pre Either \ref run(Node) "run()" or \ref init() |
| 841 | 847 |
///must be called before using this function. |
| 842 | 848 |
Arc predArc(Node v) const { return (*_pred)[v]; }
|
| 843 | 849 |
|
| 844 |
///Returns the 'previous node' of the shortest path tree for a node. |
|
| 845 |
|
|
| 850 |
///\brief Returns the 'previous node' of the shortest path tree for |
|
| 851 |
///the given node. |
|
| 852 |
/// |
|
| 846 | 853 |
///This function returns the 'previous node' of the shortest path |
| 847 | 854 |
///tree for the node \c v, i.e. it returns the last but one node |
| 848 |
/// |
|
| 855 |
///of a shortest path from a root to \c v. It is \c INVALID |
|
| 849 | 856 |
///if \c v is not reached from the root(s) or if \c v is a root. |
| 850 | 857 |
/// |
| 851 | 858 |
///The shortest path tree used here is equal to the shortest path |
| 852 |
///tree used in \ref predArc(). |
|
| 859 |
///tree used in \ref predArc() and \ref predMap(). |
|
| 853 | 860 |
/// |
| 854 | 861 |
///\pre Either \ref run(Node) "run()" or \ref init() |
| 855 | 862 |
///must be called before using this function. |
| 856 | 863 |
Node predNode(Node v) const { return (*_pred)[v]==INVALID ? INVALID:
|
| 857 | 864 |
G->source((*_pred)[v]); } |
| 858 | 865 |
|
| ... | ... |
@@ -867,19 +874,19 @@ |
| 867 | 874 |
const DistMap &distMap() const { return *_dist;}
|
| 868 | 875 |
|
| 869 | 876 |
///\brief Returns a const reference to the node map that stores the |
| 870 | 877 |
///predecessor arcs. |
| 871 | 878 |
/// |
| 872 | 879 |
///Returns a const reference to the node map that stores the predecessor |
| 873 |
///arcs, which form the shortest path tree. |
|
| 880 |
///arcs, which form the shortest path tree (forest). |
|
| 874 | 881 |
/// |
| 875 | 882 |
///\pre Either \ref run(Node) "run()" or \ref init() |
| 876 | 883 |
///must be called before using this function. |
| 877 | 884 |
const PredMap &predMap() const { return *_pred;}
|
| 878 | 885 |
|
| 879 |
///Checks if |
|
| 886 |
///Checks if the given node is reached from the root(s). |
|
| 880 | 887 |
|
| 881 | 888 |
///Returns \c true if \c v is reached from the root(s). |
| 882 | 889 |
/// |
| 883 | 890 |
///\pre Either \ref run(Node) "run()" or \ref init() |
| 884 | 891 |
///must be called before using this function. |
| 885 | 892 |
bool reached(Node v) const { return (*_heap_cross_ref)[v] !=
|
| ... | ... |
@@ -892,15 +899,15 @@ |
| 892 | 899 |
/// |
| 893 | 900 |
///\pre Either \ref run(Node) "run()" or \ref init() |
| 894 | 901 |
///must be called before using this function. |
| 895 | 902 |
bool processed(Node v) const { return (*_heap_cross_ref)[v] ==
|
| 896 | 903 |
Heap::POST_HEAP; } |
| 897 | 904 |
|
| 898 |
///The current distance of |
|
| 905 |
///The current distance of the given node from the root(s). |
|
| 899 | 906 |
|
| 900 |
///Returns the current distance of |
|
| 907 |
///Returns the current distance of the given node from the root(s). |
|
| 901 | 908 |
///It may be decreased in the following processes. |
| 902 | 909 |
/// |
| 903 | 910 |
///\pre Either \ref run(Node) "run()" or \ref init() |
| 904 | 911 |
///must be called before using this function and |
| 905 | 912 |
///node \c v must be reached but not necessarily processed. |
| 906 | 913 |
Value currentDist(Node v) const {
|
| ... | ... |
@@ -921,15 +928,15 @@ |
| 921 | 928 |
{
|
| 922 | 929 |
///The type of the digraph the algorithm runs on. |
| 923 | 930 |
typedef GR Digraph; |
| 924 | 931 |
///The type of the map that stores the arc lengths. |
| 925 | 932 |
|
| 926 | 933 |
///The type of the map that stores the arc lengths. |
| 927 |
///It must |
|
| 934 |
///It must conform to the \ref concepts::ReadMap "ReadMap" concept. |
|
| 928 | 935 |
typedef LEN LengthMap; |
| 929 |
///The type of the |
|
| 936 |
///The type of the arc lengths. |
|
| 930 | 937 |
typedef typename LEN::Value Value; |
| 931 | 938 |
|
| 932 | 939 |
/// Operation traits for Dijkstra algorithm. |
| 933 | 940 |
|
| 934 | 941 |
/// This class defines the operations that are used in the algorithm. |
| 935 | 942 |
/// \see DijkstraDefaultOperationTraits |
| ... | ... |
@@ -970,13 +977,13 @@ |
| 970 | 977 |
|
| 971 | 978 |
///\brief The type of the map that stores the predecessor |
| 972 | 979 |
///arcs of the shortest paths. |
| 973 | 980 |
/// |
| 974 | 981 |
///The type of the map that stores the predecessor |
| 975 | 982 |
///arcs of the shortest paths. |
| 976 |
///It must |
|
| 983 |
///It must conform to the \ref concepts::WriteMap "WriteMap" concept. |
|
| 977 | 984 |
typedef typename Digraph::template NodeMap<typename Digraph::Arc> PredMap; |
| 978 | 985 |
///Instantiates a PredMap. |
| 979 | 986 |
|
| 980 | 987 |
///This function instantiates a PredMap. |
| 981 | 988 |
///\param g is the digraph, to which we would like to define the |
| 982 | 989 |
///PredMap. |
| ... | ... |
@@ -985,13 +992,13 @@ |
| 985 | 992 |
return new PredMap(g); |
| 986 | 993 |
} |
| 987 | 994 |
|
| 988 | 995 |
///The type of the map that indicates which nodes are processed. |
| 989 | 996 |
|
| 990 | 997 |
///The type of the map that indicates which nodes are processed. |
| 991 |
///It must |
|
| 998 |
///It must conform to the \ref concepts::WriteMap "WriteMap" concept. |
|
| 992 | 999 |
///By default it is a NullMap. |
| 993 | 1000 |
typedef NullMap<typename Digraph::Node,bool> ProcessedMap; |
| 994 | 1001 |
///Instantiates a ProcessedMap. |
| 995 | 1002 |
|
| 996 | 1003 |
///This function instantiates a ProcessedMap. |
| 997 | 1004 |
///\param g is the digraph, to which |
| ... | ... |
@@ -1005,13 +1012,13 @@ |
| 1005 | 1012 |
return new ProcessedMap(); |
| 1006 | 1013 |
} |
| 1007 | 1014 |
|
| 1008 | 1015 |
///The type of the map that stores the distances of the nodes. |
| 1009 | 1016 |
|
| 1010 | 1017 |
///The type of the map that stores the distances of the nodes. |
| 1011 |
///It must |
|
| 1018 |
///It must conform to the \ref concepts::WriteMap "WriteMap" concept. |
|
| 1012 | 1019 |
typedef typename Digraph::template NodeMap<typename LEN::Value> DistMap; |
| 1013 | 1020 |
///Instantiates a DistMap. |
| 1014 | 1021 |
|
| 1015 | 1022 |
///This function instantiates a DistMap. |
| 1016 | 1023 |
///\param g is the digraph, to which we would like to define |
| 1017 | 1024 |
///the DistMap |
| ... | ... |
@@ -1020,24 +1027,21 @@ |
| 1020 | 1027 |
return new DistMap(g); |
| 1021 | 1028 |
} |
| 1022 | 1029 |
|
| 1023 | 1030 |
///The type of the shortest paths. |
| 1024 | 1031 |
|
| 1025 | 1032 |
///The type of the shortest paths. |
| 1026 |
///It must |
|
| 1033 |
///It must conform to the \ref concepts::Path "Path" concept. |
|
| 1027 | 1034 |
typedef lemon::Path<Digraph> Path; |
| 1028 | 1035 |
}; |
| 1029 | 1036 |
|
| 1030 | 1037 |
/// Default traits class used by DijkstraWizard |
| 1031 | 1038 |
|
| 1032 |
/// To make it easier to use Dijkstra algorithm |
|
| 1033 |
/// we have created a wizard class. |
|
| 1034 |
/// This \ref DijkstraWizard class needs default traits, |
|
| 1035 |
/// as well as the \ref Dijkstra class. |
|
| 1036 |
/// The \ref DijkstraWizardBase is a class to be the default traits of the |
|
| 1037 |
/// \ref DijkstraWizard class. |
|
| 1039 |
/// Default traits class used by DijkstraWizard. |
|
| 1040 |
/// \tparam GR The type of the digraph. |
|
| 1041 |
/// \tparam LEN The type of the length map. |
|
| 1038 | 1042 |
template<typename GR, typename LEN> |
| 1039 | 1043 |
class DijkstraWizardBase : public DijkstraWizardDefaultTraits<GR,LEN> |
| 1040 | 1044 |
{
|
| 1041 | 1045 |
typedef DijkstraWizardDefaultTraits<GR,LEN> Base; |
| 1042 | 1046 |
protected: |
| 1043 | 1047 |
//The type of the nodes in the digraph. |
| ... | ... |
@@ -1090,34 +1094,25 @@ |
| 1090 | 1094 |
/// which makes it easier to use the algorithm. |
| 1091 | 1095 |
template<class TR> |
| 1092 | 1096 |
class DijkstraWizard : public TR |
| 1093 | 1097 |
{
|
| 1094 | 1098 |
typedef TR Base; |
| 1095 | 1099 |
|
| 1096 |
///The type of the digraph the algorithm runs on. |
|
| 1097 | 1100 |
typedef typename TR::Digraph Digraph; |
| 1098 | 1101 |
|
| 1099 | 1102 |
typedef typename Digraph::Node Node; |
| 1100 | 1103 |
typedef typename Digraph::NodeIt NodeIt; |
| 1101 | 1104 |
typedef typename Digraph::Arc Arc; |
| 1102 | 1105 |
typedef typename Digraph::OutArcIt OutArcIt; |
| 1103 | 1106 |
|
| 1104 |
///The type of the map that stores the arc lengths. |
|
| 1105 | 1107 |
typedef typename TR::LengthMap LengthMap; |
| 1106 |
///The type of the length of the arcs. |
|
| 1107 | 1108 |
typedef typename LengthMap::Value Value; |
| 1108 |
///\brief The type of the map that stores the predecessor |
|
| 1109 |
///arcs of the shortest paths. |
|
| 1110 | 1109 |
typedef typename TR::PredMap PredMap; |
| 1111 |
///The type of the map that stores the distances of the nodes. |
|
| 1112 | 1110 |
typedef typename TR::DistMap DistMap; |
| 1113 |
///The type of the map that indicates which nodes are processed. |
|
| 1114 | 1111 |
typedef typename TR::ProcessedMap ProcessedMap; |
| 1115 |
///The type of the shortest paths |
|
| 1116 | 1112 |
typedef typename TR::Path Path; |
| 1117 |
///The heap type used by the dijkstra algorithm. |
|
| 1118 | 1113 |
typedef typename TR::Heap Heap; |
| 1119 | 1114 |
|
| 1120 | 1115 |
public: |
| 1121 | 1116 |
|
| 1122 | 1117 |
/// Constructor. |
| 1123 | 1118 |
DijkstraWizard() : TR() {}
|
| ... | ... |
@@ -1183,17 +1178,18 @@ |
| 1183 | 1178 |
template<class T> |
| 1184 | 1179 |
struct SetPredMapBase : public Base {
|
| 1185 | 1180 |
typedef T PredMap; |
| 1186 | 1181 |
static PredMap *createPredMap(const Digraph &) { return 0; };
|
| 1187 | 1182 |
SetPredMapBase(const TR &b) : TR(b) {}
|
| 1188 | 1183 |
}; |
| 1189 |
///\brief \ref named-func-param "Named parameter" |
|
| 1190 |
///for setting PredMap object. |
|
| 1184 |
|
|
| 1185 |
///\brief \ref named-templ-param "Named parameter" for setting |
|
| 1186 |
///the predecessor map. |
|
| 1191 | 1187 |
/// |
| 1192 |
///\ref named-func-param "Named parameter" |
|
| 1193 |
///for setting PredMap object. |
|
| 1188 |
///\ref named-templ-param "Named parameter" function for setting |
|
| 1189 |
///the map that stores the predecessor arcs of the nodes. |
|
| 1194 | 1190 |
template<class T> |
| 1195 | 1191 |
DijkstraWizard<SetPredMapBase<T> > predMap(const T &t) |
| 1196 | 1192 |
{
|
| 1197 | 1193 |
Base::_pred=reinterpret_cast<void*>(const_cast<T*>(&t)); |
| 1198 | 1194 |
return DijkstraWizard<SetPredMapBase<T> >(*this); |
| 1199 | 1195 |
} |
| ... | ... |
@@ -1201,17 +1197,19 @@ |
| 1201 | 1197 |
template<class T> |
| 1202 | 1198 |
struct SetDistMapBase : public Base {
|
| 1203 | 1199 |
typedef T DistMap; |
| 1204 | 1200 |
static DistMap *createDistMap(const Digraph &) { return 0; };
|
| 1205 | 1201 |
SetDistMapBase(const TR &b) : TR(b) {}
|
| 1206 | 1202 |
}; |
| 1207 |
///\brief \ref named-func-param "Named parameter" |
|
| 1208 |
///for setting DistMap object. |
|
| 1203 |
|
|
| 1204 |
///\brief \ref named-templ-param "Named parameter" for setting |
|
| 1205 |
///the distance map. |
|
| 1209 | 1206 |
/// |
| 1210 |
///\ref named-func-param "Named parameter" |
|
| 1211 |
///for setting DistMap object. |
|
| 1207 |
///\ref named-templ-param "Named parameter" function for setting |
|
| 1208 |
///the map that stores the distances of the nodes calculated |
|
| 1209 |
///by the algorithm. |
|
| 1212 | 1210 |
template<class T> |
| 1213 | 1211 |
DijkstraWizard<SetDistMapBase<T> > distMap(const T &t) |
| 1214 | 1212 |
{
|
| 1215 | 1213 |
Base::_dist=reinterpret_cast<void*>(const_cast<T*>(&t)); |
| 1216 | 1214 |
return DijkstraWizard<SetDistMapBase<T> >(*this); |
| 1217 | 1215 |
} |
| ... | ... |
@@ -1219,29 +1217,31 @@ |
| 1219 | 1217 |
template<class T> |
| 1220 | 1218 |
struct SetProcessedMapBase : public Base {
|
| 1221 | 1219 |
typedef T ProcessedMap; |
| 1222 | 1220 |
static ProcessedMap *createProcessedMap(const Digraph &) { return 0; };
|
| 1223 | 1221 |
SetProcessedMapBase(const TR &b) : TR(b) {}
|
| 1224 | 1222 |
}; |
| 1225 |
///\brief \ref named-func-param "Named parameter" |
|
| 1226 |
///for setting ProcessedMap object. |
|
| 1223 |
|
|
| 1224 |
///\brief \ref named-func-param "Named parameter" for setting |
|
| 1225 |
///the processed map. |
|
| 1227 | 1226 |
/// |
| 1228 |
/// \ref named-func-param "Named parameter" |
|
| 1229 |
///for setting ProcessedMap object. |
|
| 1227 |
///\ref named-templ-param "Named parameter" function for setting |
|
| 1228 |
///the map that indicates which nodes are processed. |
|
| 1230 | 1229 |
template<class T> |
| 1231 | 1230 |
DijkstraWizard<SetProcessedMapBase<T> > processedMap(const T &t) |
| 1232 | 1231 |
{
|
| 1233 | 1232 |
Base::_processed=reinterpret_cast<void*>(const_cast<T*>(&t)); |
| 1234 | 1233 |
return DijkstraWizard<SetProcessedMapBase<T> >(*this); |
| 1235 | 1234 |
} |
| 1236 | 1235 |
|
| 1237 | 1236 |
template<class T> |
| 1238 | 1237 |
struct SetPathBase : public Base {
|
| 1239 | 1238 |
typedef T Path; |
| 1240 | 1239 |
SetPathBase(const TR &b) : TR(b) {}
|
| 1241 | 1240 |
}; |
| 1241 |
|
|
| 1242 | 1242 |
///\brief \ref named-func-param "Named parameter" |
| 1243 | 1243 |
///for getting the shortest path to the target node. |
| 1244 | 1244 |
/// |
| 1245 | 1245 |
///\ref named-func-param "Named parameter" |
| 1246 | 1246 |
///for getting the shortest path to the target node. |
| 1247 | 1247 |
template<class T> |
| ... | ... |
@@ -1787,17 +1787,17 @@ |
| 1787 | 1787 |
/// The most important usage of it is storing certain nodes or arcs |
| 1788 | 1788 |
/// that were marked \c true by an algorithm. |
| 1789 | 1789 |
/// For example it makes easier to store the nodes in the processing |
| 1790 | 1790 |
/// order of Dfs algorithm, as the following examples show. |
| 1791 | 1791 |
/// \code |
| 1792 | 1792 |
/// std::vector<Node> v; |
| 1793 |
/// dfs(g |
|
| 1793 |
/// dfs(g).processedMap(loggerBoolMap(std::back_inserter(v))).run(s); |
|
| 1794 | 1794 |
/// \endcode |
| 1795 | 1795 |
/// \code |
| 1796 | 1796 |
/// std::vector<Node> v(countNodes(g)); |
| 1797 |
/// dfs(g |
|
| 1797 |
/// dfs(g).processedMap(loggerBoolMap(v.begin())).run(s); |
|
| 1798 | 1798 |
/// \endcode |
| 1799 | 1799 |
/// |
| 1800 | 1800 |
/// \note The container of the iterator must contain enough space |
| 1801 | 1801 |
/// for the elements or the iterator should be an inserter iterator. |
| 1802 | 1802 |
/// |
| 1803 | 1803 |
/// \note LoggerBoolMap is just \ref concepts::WriteMap "writable", so |
0 comments (0 inline)