Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "stdafx.h"
- #include <iostream>
- using namespace std;
- void FillTheMatrix(int N, int ** &a)
- {
- cout << "Автоматическое заполнение матрицы смежности для графа" << endl;
- for (int i = 0; i < N; i++)
- {
- a[i][i] = 0;
- for (int j = i + 1; j < N; j++)
- {
- a[i][j] = rand() % 100 + 1;
- a[j][i] = a[i][j];
- }
- }
- cout << endl;
- }
- void GreedyAlg(int N, int ** a, bool *&visit, int &sum, int root, int count)
- {
- int min = 99999999;
- int minind = 0;
- for (int i = 0; i < N; i++)
- if ((a[root][i] < min) && (visit[i] == false) && (i != root))
- {
- min = a[root][i];
- minind = i;
- }
- sum += a[root][minind];
- visit[minind] = true;
- count++;
- if (count == N - 1)
- {
- sum += a[minind][0];
- cout << "Сумма: " << sum << endl;
- }
- else
- {
- GreedyAlg(N, a, visit, sum, minind, count);
- }
- }
- void Output(int N, int ** a)
- {
- cout << endl;
- cout << "Вывод матицы: " << endl;
- for (int i = 0; i < N; i++)
- {
- for (int j = 0; j < N; j++)
- cout << a[i][j] << " ";
- cout << endl;
- }
- cout << endl;
- }
- int main()
- {
- setlocale(LC_ALL, "RUS");
- int N;
- cout << "Введите число вершин: ";
- cin >> N;
- int **matrix = new int*[N];
- for (int i = 0; i < N; i++)
- matrix[i] = new int[N];
- FillTheMatrix(N, matrix);
- Output(N, matrix);
- int sum = 0;
- bool *visit = new bool[N];
- for (int i = 0; i < N; i++)
- visit[i] = false;
- visit[0] = true;
- GreedyAlg(N, matrix, visit, sum, 0, 0);
- system("pause");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement