Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- #include <iostream>
- #include <vector>
- #include <queue>
- #include <climits>
- using namespace std;
- int main() {
- int ver; //кол-во вершин
- cin >> ver;
- vector<vector<pair<int, int>>> list_merge(ver); //список смежности
- vector<int> weights(ver); // веса вершин
- int g, h, ves;
- // Считываем вершины и веса рёбер
- cin >> g >> h >> ves;
- while (g != 0 || h != 0) {
- list_merge[g - 1].push_back({ h - 1, ves });
- list_merge[h - 1].push_back({ g - 1, ves });
- cin >> g >> h >> ves;
- }
- for (int i = 0; i < ver; i++) {
- cin >> weights[i];
- }
- vector<int> result_weights(ver, INT_MAX); // Веса + расстояния до трёх заданных вершин
- int v1, v2, v3;
- cin >> v1 >> v2 >> v3;
- // Найдем минимальную сумму для каждой вершины
- for (int start_p = 0; start_p < ver; start_p++) {
- vector<int> dist(ver, INT_MAX);
- vector<int> bfs(ver);
- dist[start_p] = 0;
- for (int i = 0; i < ver; i++) {
- int nearest = -1;
- for (int j = 0; j < ver; j++) {
- if (bfs[j] == 0 && (nearest == -1 || dist[nearest] > dist[j])) {
- nearest = j;
- }
- }
- if (dist[nearest] == INT_MAX) {
- break;
- }
- bfs[nearest] = 1;
- for (pair<int, int> a : list_merge[nearest]) {
- if (dist[a.first] > dist[nearest] + a.second) {
- dist[a.first] = dist[nearest] + a.second;
- }
- }
- }
- result_weights[start_p] = weights[start_p] + dist[v1 - 1] + dist[v2 - 1] + dist[v3 - 1];
- }
- for (int a : result_weights) {
- cout << a << " ";
- }
- //Найдем минимальную сумму и соответствующую вершину
- int min_sum = result_weights[0];
- int min_vertex = 0;
- for (int i = 1; i < ver; i++) {
- if (result_weights[i] < min_sum) {
- min_sum = result_weights[i];
- min_vertex = i;
- }
- }
- cout << "Минимальная сумма: " << min_sum << endl;
- cout << "Вершина: " << min_vertex + 1 << endl;
- return 0;
- }
- */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement