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