... | ... |
@@ -1063,43 +1063,45 @@ |
1063 | 1063 |
protected: |
1064 | 1064 |
//The type of the nodes in the digraph. |
1065 | 1065 |
typedef typename Base::Digraph::Node Node; |
1066 | 1066 |
|
1067 | 1067 |
//Pointer to the digraph the algorithm runs on. |
1068 | 1068 |
void *_g; |
1069 | 1069 |
//Pointer to the length map |
1070 | 1070 |
void *_length; |
1071 |
//Pointer to the map of processed nodes. |
|
1072 |
void *_processed; |
|
1071 | 1073 |
//Pointer to the map of predecessors arcs. |
1072 | 1074 |
void *_pred; |
1073 | 1075 |
//Pointer to the map of distances. |
1074 | 1076 |
void *_dist; |
1075 | 1077 |
//Pointer to the source node. |
1076 | 1078 |
Node _source; |
1077 | 1079 |
|
1078 | 1080 |
public: |
1079 | 1081 |
/// Constructor. |
1080 | 1082 |
|
1081 | 1083 |
/// This constructor does not require parameters, therefore it initiates |
1082 | 1084 |
/// all of the attributes to default values (0, INVALID). |
1083 |
DijkstraWizardBase() : _g(0), _length(0), _pred(0), |
|
1085 |
DijkstraWizardBase() : _g(0), _length(0), _processed(0), _pred(0), |
|
1084 | 1086 |
_dist(0), _source(INVALID) {} |
1085 | 1087 |
|
1086 | 1088 |
/// Constructor. |
1087 | 1089 |
|
1088 | 1090 |
/// This constructor requires some parameters, |
1089 | 1091 |
/// listed in the parameters list. |
1090 | 1092 |
/// Others are initiated to 0. |
1091 | 1093 |
/// \param g The digraph the algorithm runs on. |
1092 | 1094 |
/// \param l The length map. |
1093 | 1095 |
/// \param s The source node. |
1094 | 1096 |
DijkstraWizardBase(const GR &g,const LM &l, Node s=INVALID) : |
1095 | 1097 |
_g(reinterpret_cast<void*>(const_cast<GR*>(&g))), |
1096 | 1098 |
_length(reinterpret_cast<void*>(const_cast<LM*>(&l))), |
1097 |
_pred(0), _dist(0), _source(s) {} |
|
1099 |
_processed(0), _pred(0), _dist(0), _source(s) {} |
|
1098 | 1100 |
|
1099 | 1101 |
}; |
1100 | 1102 |
|
1101 | 1103 |
/// Auxiliary class for the function type interface of Dijkstra algorithm. |
1102 | 1104 |
|
1103 | 1105 |
/// This auxiliary class is created to implement the function type |
1104 | 1106 |
/// interface of \ref Dijkstra algorithm. It uses the functions and features |
1105 | 1107 |
/// of the plain \ref Dijkstra, but it is much simpler to use it. |
... | ... |
@@ -1168,18 +1170,22 @@ |
1168 | 1170 |
///Runs Dijkstra algorithm from a source node. |
1169 | 1171 |
///The node can be given with the \ref source() function. |
1170 | 1172 |
void run() |
1171 | 1173 |
{ |
1172 | 1174 |
if(Base::_source==INVALID) throw UninitializedParameter(); |
1173 | 1175 |
Dijkstra<Digraph,LengthMap,TR> |
1174 | 1176 |
dij(*reinterpret_cast<const Digraph*>(Base::_g), |
1175 | 1177 |
*reinterpret_cast<const LengthMap*>(Base::_length)); |
1176 |
if(Base::_pred) dij.predMap(*reinterpret_cast<PredMap*>(Base::_pred)); |
|
1177 |
if(Base::_dist) dij.distMap(*reinterpret_cast<DistMap*>(Base::_dist)); |
|
1178 |
if(Base::_processed) |
|
1179 |
dij.processedMap(*reinterpret_cast<ProcessedMap*>(Base::_processed)); |
|
1180 |
if(Base::_pred) |
|
1181 |
dij.predMap(*reinterpret_cast<PredMap*>(Base::_pred)); |
|
1182 |
if(Base::_dist) |
|
1183 |
dij.distMap(*reinterpret_cast<DistMap*>(Base::_dist)); |
|
1178 | 1184 |
dij.run(Base::_source); |
1179 | 1185 |
} |
1180 | 1186 |
|
1181 | 1187 |
///Runs Dijkstra algorithm from the given node. |
1182 | 1188 |
|
1183 | 1189 |
///Runs Dijkstra algorithm from the given node. |
1184 | 1190 |
///\param s is the given source. |
1185 | 1191 |
void run(Node s) |
0 comments (0 inline)