int main()
{
setlocale(LC_ALL, "Rus");
int n;
cout > n;
cout > adj_matrix[j];
if (adj_matrix[j] == 0 && i != j)
adj_matrix[j] = INF;
}
}
// Алгоритм Флойда-Уоршелла для нахождения кратчайших путей между всеми парами вершин
for (int k = 0; k < n; k++)
{
for (int i = 0; i < n; i++)
for (int j = 0; j < n; j++)
adj_matrix[j] = min(adj_matrix[j], adj_matrix[k] + adj_matrix[k][j]);
}
int median = -1;
int min_sum_dist = INF;
for (int i = 0; i < n; i++)
{
int sum_dist = 0;
for (int j = 0; j < n; j++)
sum_dist += adj_matrix[j];
if (sum_dist < min_sum_dist)
{
min_sum_dist = sum_dist;
median = i;
}
}
cout
Этот код решает задачу нахождения медианы графа, то есть такой вершины, для которой сумма расстояний до всех остальных вершин минимальна.
Сначала выполняется алгоритм Флойда-Уоршелла для построения матрицы кратчайших расстояний между всеми парами вершин. Затем, для каждой вершины считается сумма расстояний до всех остальных вершин графа. Наконец, выбирается такая вершина, для которой сумма расстояний минимальна, и она выводится как медиана графа.
Этот алгоритм может быть полезен, например, при планировании логистики: в качестве медианы может быть выбран центр склада или дистрибуции, откуда наименьшее расстояние до всех остальных городов.