void NearestNeighborGraph(const vector<Vector3>& pc,int k,Graph::Graph<int,int>& G) { vector<Vector> copy(pc.size()); for(size_t i=0;i<copy.size();i++) { copy[i].resize(3); pc[i].get(copy[i]); } G.Resize(pc.size()); for(size_t i=0;i<pc.size();i++) G.nodes[i] = (int)i; KDTree* tree = KDTree::Create(copy,3,pc.size()); vector<Real> dist(k); vector<int> inds(k); for(size_t i=0;i<pc.size();i++) { tree->KClosestPoints(copy[i],k,&dist[0],&inds[0]); for(int j=0;j<k;j++) { if(inds[j] == (int)i) continue; G.AddEdge((int)i,inds[j],0); } } }