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)