Генерация графа. Алгоритм Прима

Помогите пожалуйста составить генерацию графа и алгоритм Прима в одном коде. Необходимо сгенерировать граф и реализовать алгоритма Прима.

P.S

Числа которые генерируются после Enter the number of vertices: должны быть задействованы при построении матрицы.

Вот мои наработки:

#include <iostream>
#include <conio.h>
#include <iomanip>
#include <stdlib.h>
 
int a, b, u, v, n, x, y;
int ne = 1;
int visited[10] = {0};
int min;
int mincost = 0;
 
void gen_random_graph(int n)
{
    srand(time(0));
    int adj_matrix[n][n];
 
    for(int u = 0; u < n; u++)
    {
        for (int v = u; v < n; v++)
        { //Вам не нужно рассчитывать вес дважды, поэтому цикл начинается с u
            if(adj_matrix[u][v] == adj_matrix[v][u])
            {
                adj_matrix[u][v] = rand() % 10 + 1;
                std::cout << adj_matrix[u][v] << std::endl;
            }
        }
    }
}
 
int main()
{
    int N;
    int adj_matrix[n][n];
    std::cout << "Enter the number of vertices: ";
    std::cin >> N;
    gen_random_graph(N);
 
    int path[100] = {0}; //В этот массив будут записываться вершины, по которым составиться путь
    int path_index = 0;
 
    std::cout << "\nMatrix" << std::endl; //Матрица
 
    for(int u = 0; u < N; u++)
    {
        for(int v = 0; v < N; v++)
        {
            std::cout << adj_matrix[u][v] << std::setw(5);
        }
        std::cout << "\n";
    }
 
    while(ne < N)
    {
        for(u = 1, min = 999; u <= N; u++)
        for(v = 1; v <= N; v++)
        if(adj_matrix[u][v] < min)
        if(visited[u] != 0)
        {
            min = adj_matrix[u][v];
            a = x = u;
            b = y = v;
        }
        if(visited[x] == 0 || visited[y] == 0)
        {
            path[path_index] = b;
            path_index++;
            //cout<<"\n "<<ne++<<"  "<<a<<"  "<<b<<min; //Можно вывести так
            ne++; //если строчку выше раскомментировать - эту закомментировать
            mincost += min;
            visited[b] = 1;
 
        }
        adj_matrix[a][b] = adj_matrix[b][a] = 999;
    }
        
    std::cout << "Minimum spanning tree\n"; //Минимальное остовное дерево
    std::cout << 1 << " --> ";
    for(int u = 0; u < N-1; u++)
    {
        std::cout << path[u];
        if(u < N-2)
        {
            std::cout<<" --> ";
        }
    }
    std::cout << "\nMinimum cost " << mincost; //Минимальная стоимость
    std::cin.get();
 
    return 0;
}

введите сюда описание изображения введите сюда описание изображения


Ответы (0 шт):