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);
    }
  }
}