コード例 #1
0
ファイル: Lee.cpp プロジェクト: GordonSmith/eclide
bool LeeRoutePlannerImpl::EndAddPoints( void )
{
	bool bSuccess=false;

	m_width=abs(m_maxX-m_minX)+m_border*2;
	m_height=abs(m_maxY-m_minY)+m_border*2;

	assert(m_height>0);
	assert(m_width>0);

	bSuccess=m_width>0 && m_height>0;

	if ( bSuccess )
	{
		grid_vertices_size_type	i, numvertices;	

		numvertices=grid_vertices_size_type((m_width+1) * (m_height+1));

		for (i=0; i<numvertices; i++)
			add_vertex(m_graph);

		assert(numvertices==num_vertices(m_graph));

		bSuccess=numvertices==num_vertices(m_graph);

		if ( bSuccess )
		{
			AddAllEdges();
			InitWeights();
			m_bgrid=true; 
		}
	}

	return bSuccess;
}
コード例 #2
0
ファイル: dtb_impl.hpp プロジェクト: 0x0all/mlpack
void DualTreeBoruvka<MetricType, TreeType>::ComputeMST(arma::mat& results)
{
  Timer::Start("emst/mst_computation");

  totalDist = 0; // Reset distance.

  typedef DTBRules<MetricType, TreeType> RuleType;
  RuleType rules(data, connections, neighborsDistances, neighborsInComponent,
                 neighborsOutComponent, metric);
  while (edges.size() < (data.n_cols - 1))
  {
    if (naive)
    {
      // Full O(N^2) traversal.
      for (size_t i = 0; i < data.n_cols; ++i)
        for (size_t j = 0; j < data.n_cols; ++j)
          rules.BaseCase(i, j);
    }
    else
    {
      typename TreeType::template DualTreeTraverser<RuleType> traverser(rules);
      traverser.Traverse(*tree, *tree);
    }

    AddAllEdges();

    Cleanup();

    Log::Info << edges.size() << " edges found so far." << std::endl;
    if (!naive)
    {
      Log::Info << rules.BaseCases() << " cumulative base cases." << std::endl;
      Log::Info << rules.Scores() << " cumulative node combinations scored."
          << std::endl;
    }
  }

  Timer::Stop("emst/mst_computation");

  EmitResults(results);

  Log::Info << "Total spanning tree length: " << totalDist << std::endl;
}