#ifndef NEARESTNEIGHBOUR_H
#define NEARESTNEIGHBOUR_H
+#include <array>
+#include "aux.h"
+#include "rrtbase.h"
#include "rrtnode.h"
+struct mcnn { // min-cost nearest neighbour
+ float mc;
+ RRTNode *nn;
+};
+#pragma omp declare reduction \
+ (minn: struct mcnn: omp_out = \
+ omp_in.mc < omp_out.mc ? omp_in : omp_out) \
+ initializer \
+ (omp_priv(omp_orig))
+
RRTNode *nn1(
- RRTNode *root,
+ std::vector<RRTNode *> &nodes,
+ RRTNode *node,
+ float (*cost)(RRTNode *, RRTNode *));
+RRTNode *nn2(
+ std::vector<RRTNode *> &nodes,
+ RRTNode *node,
+ float (*cost)(RRTNode *, RRTNode *));
+RRTNode *nn3(
+ std::vector<RRTNode *> (&nodes)[IYSIZE],
+ RRTNode *node,
+ float (*cost)(RRTNode *, RRTNode *));
+RRTNode *nn4(
+ std::array<std::vector<RRTNode *>, IYSIZE> &nodes,
+ RRTNode *node,
+ float (*cost)(RRTNode *, RRTNode *));
+RRTNode *nn5(
+ std::vector<RRTNode *> (&nodes)[IYSIZE],
+ RRTNode *node,
+ float (*cost)(RRTNode *, RRTNode *),
+ char tree);
+RRTNode *nn6(
+ std::vector<RRTNode *> (&nodes)[IYSIZE],
RRTNode *node,
float (*cost)(RRTNode *, RRTNode *));