Вопрос Мой код полюбуйтесь оцените на c++

Регистрация
4 Янв 2013
Сообщения
82
Репутация
0
Спасибо
0
Монет
0
#include <iostream>



#include <vector>



#include <limits>







using namespace std;







const int INF = numeric_limits<int>::max();







int main() {



setlocale(LC_ALL, "Rus");



int n;



cout « "Введите размерность матрицы расстояний: ";



cin » n;







cout « "Введите элементы матрицы расстояний: " « endl;



vector<vector<int» adj_matrix(n, vector<int>(n));



for (int i = 0; i < n; i++) {



for (int j = 0; j < n; j++) {



cin » 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 « "Медиана графа: " « median « endl;







return 0;



}
 
Очевидно, это не твой код: символы » и « в коде показывают, что ты его откуда-то скопипастил и ни разу не попытался запустить.

"Ответы" не занимаются преобразованием << и >>.
 
Перепишем: #include
#include
#include

using namespace std;

const int INF = numeric_limits::max();

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
 
0/10 за оформление не в // код И без отступов
ну и за namespace std
 
Этот код решает задачу нахождения медианы графа, то есть такой вершины, для которой сумма расстояний до всех остальных вершин минимальна.

Сначала выполняется алгоритм Флойда-Уоршелла для построения матрицы кратчайших расстояний между всеми парами вершин. Затем, для каждой вершины считается сумма расстояний до всех остальных вершин графа. Наконец, выбирается такая вершина, для которой сумма расстояний минимальна, и она выводится как медиана графа.

Этот алгоритм может быть полезен, например, при планировании логистики: в качестве медианы может быть выбран центр склада или дистрибуции, откуда наименьшее расстояние до всех остальных городов.

7/10
 
Назад
Сверху