Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.12.2021, 17:40   #1
buk_bear
Пользователь
 
Регистрация: 09.12.2021
Сообщений: 10
По умолчанию Необходимо объединить два кода в один

Помогите объединить два кода в один

Алгоритм Прима:
Код:
#include <bits/stdc++.h>
 
using namespace std;
 
const int INF = 1e9 + 7;
 
vector<pair<int, int>> graph[100000];
bool used[100000];      //включили ли мы соответствующую вершину в остов
 
int main() {
    //Ввод графа...
 
    int mst_weight = 0;     //Текущий вес остова.
 
    priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> q;
 
    q.push({0, 0});     //Начнём с вершины 0.
 
    while (!q.empty()) {
        pair<int, int> c = q.top();
        q.pop();
 
        int dst = c.first, v = c.second;
 
        if (used[v]) {      //вершина уже добавлена в остов
            continue;
        }
 
        used[v] = true;
        mst_weight += dst;
 
        for (pair<int, int> e: graph[v]) {
            int u = e.first, len_vu = e.second;
 
            if (!used[u]) {
                q.push({len_vu, u});    //Заметьте: мы учитываем только длину ребра.
            }
        }
    }
 
    cout << "Minimum spanning tree weight: " << mst_weight << endl;
}
Генерация и вывод графа:
Код:
#include <iostream>
#include <string>
#include <vector>
#include <random>
#include <queue>
 
using namespace std;
 
using Vec = vector<int>;
using Matrix = vector<Vec>;
 
struct Edge
{
    int i;
    int j;
    int cost;
};
 
Matrix get_random_graph(int n)
{
    mt19937 engine { random_device()() } ;
    uniform_int_distribution<int> uid(1, 10);
    Matrix adj(n, Vec(n));
    for (int i = 0; i < n; ++i)
    {
        for (int j = i + 1; j < n; ++j)
        {
            adj[i][j] = adj[j][i] = uid(engine);
        }
    }
    return adj;
}
 
void print(const Matrix& m, const string& title) //Вывод графа
{
    cout << title << "\n";
    for (const auto& row : m)
    {
        for (const auto item : row)
        {
            cout << item << "\t";
        }
        cout << "\n";
     }
}
 
int main()
{
    int n;
    cout << "Enter n: ";
    cin >> n;
    Matrix adj = get_random_graph(n);
    print(adj, "Graph");
    return 0;
}
buk_bear вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Объединить два кода в один c++\noob Общие вопросы C/C++ 3 08.03.2011 11:21
как можно объединить два массива в один новый? sqwerty Общие вопросы C/C++ 3 11.06.2009 23:50
Как объединить два массива в один. TheWanderer Общие вопросы C/C++ 2 10.11.2008 00:15
два запроса, которые нужно объединить в один. andrianov123 БД в Delphi 4 16.05.2008 16:06
как в PhotoShop два файла скеить в один pdf файл? Допустим я нарисовал 2 страницы книги и мне их нужно объединить в один pdf N!ckeL Моделирование, изометрия, photoshop, 3d редакторы 2 15.05.2008 19:34