117 double max_propagation_distance,
118 std::vector<SurfacePoint>* stop_points)
125 for(
unsigned i=0; i<
m_nodes.size(); ++i)
130 clock_t start = clock();
132 std::vector<node_pointer> visible_nodes;
133 for(
unsigned i=0; i<
m_sources.size(); ++i)
139 for(
unsigned j=0; j<visible_nodes.size(); ++j)
142 double distance = node->distance(source);
143 if(distance < node->distance_from_source())
145 node->distance_from_source() = distance;
146 node->source_index() = i;
147 node->previous() = NULL;
150 visible_nodes.clear();
153 for(
unsigned i=0; i<
m_nodes.size(); ++i)
161 unsigned counter = 0;
162 unsigned satisfied_index = 0;
164 std::vector<double> distances_between_nodes;
167 if(counter++ % 10 == 0)
177 assert(min_node->distance_from_source() <
GEODESIC_INF);
179 visible_nodes.clear();
180 distances_between_nodes.clear();
183 distances_between_nodes,
184 min_node->distance_from_source());
186 for(
unsigned i=0; i<visible_nodes.size(); ++i)
190 if(next_node->distance_from_source() > min_node->distance_from_source() +
191 distances_between_nodes[i])
195 typename queue_type::iterator iter =
m_queue.find(next_node);
199 next_node->distance_from_source() = min_node->distance_from_source() +
200 distances_between_nodes[i];
201 next_node->source_index() = min_node->source_index();
202 next_node->previous() = min_node;
209 clock_t finish = clock();
210 m_time_consumed = (
static_cast<double>(finish)-
static_cast<double>(start))/CLOCKS_PER_SEC;