コード例 #1
0
void djikstra(int graph[n][n], int node, int rank){

	int dist[n], set[n];
	int min, i, j;

	// Inicialização das distâncias
	for(i = 0; i < n; i++)
		dist[i] = INFINITY, set[i] = 0;

	dist[node] = 0;

	for(i = 0; i < n-1; i++){

		// Calculo da distância mínima
		min = minimumDistance(dist, set);

		set[min] = 1;

		// Descoberta do melhor caminho entre dois vértices
		for(j = 0; j < n; j++){
			if(!set[j] && graph[min][j] && dist[min] != INFINITY && dist[min] + graph[min][j] < dist[j])
				dist[j] = dist[min] + graph[min][j];
		}
	}

	solution(dist, node, rank);
}
コード例 #2
0
ファイル: KMeansTrainer.cpp プロジェクト: openube/ELL
    void KMeansTrainer::initializeMeans(math::ConstMatrixReference<double, math::MatrixLayout::columnMajor> X)
    {
        size_t N = X.NumColumns();
        size_t K = _numClusters;
        size_t choice = rand() % N;

        _means.GetColumn(0).CopyFrom(X.GetColumn(choice));

        math::ColumnVector<double> minimumDistance(X.NumColumns());
        for (int k = 1; k < _numClusters; ++k)
        {
            // distance to previously selected mean
            auto D = pairwiseDistance(X, _means.GetSubMatrix(0, k - 1, _means.NumRows(), 1));
            auto distanceToPreviousMean = D.GetColumn(0);

            if (k == 1)
            {
                minimumDistance.CopyFrom(distanceToPreviousMean);
            }
            else
            {
                // distance to closest center
                for (int i = 0; i < minimumDistance.Size(); ++i)
                    minimumDistance[i] = std::min(minimumDistance[i], distanceToPreviousMean[i]);
            }

            choice = weightedSample(minimumDistance);
            _means.GetColumn(k).CopyFrom(X.GetColumn(choice));
        }
    }
コード例 #3
0
float polygonClosestPoint(Shape* shape, Point p) 
{
        float dist = std::numeric_limits<float>::infinity(); 
        int nbEdges = shape->listEdges.size();
        for (int i = 0; i < nbEdges; i++) {
            Point a = shape->listEdges[i].p0;
            Point b = shape->listEdges[i].p1;
            float distToAB = minimumDistance(&a, &b, &p);
            dist = distToAB < dist ? distToAB : dist;
        }

    return dist < 0.0001 ? 0.0f : dist;
}
コード例 #4
0
void djikstra(int graph[N][N], int node){

	int dist[N], set[N];
	int min, i, j;

	for(i = 0; i < N; i++)
		dist[i] = INF, set[i] = 0;

	dist[node] = 0;

	for(i = 0; i < N-1; i++){
		min = minimumDistance(dist, set);

		set[min] = 1;

		for(j = 0; j < N; j++){
			if(!set[j] && graph[min][j] && dist[min] != INF && dist[min] + graph[min][j] < dist[j])
				dist[j] = dist[min] + graph[min][j];
		}
	}

	solution(dist);
}