Программа считывает данные из "1.txt", где хранится кол-во столбцов и строчек матрицы и сама матрица, далее по алгоритму Краскала программа находит минимальное остовное дерево и выводит его вес
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
int main()
{
ifstream file;
int n = 0;
file.open("1.txt");
file >> n;
vector<vector<int>> matrix(n, vector<int>(n));
vector<int> Q(n);
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
file >> matrix[i][j];
if (matrix[i][j] == 0) {
matrix[i][j] = 999; //infinity
}
}
}
file.close();
int min = 999;
int summ = 0;
int mini, minj = 0;
for (int k = 0; k < n-1; k++) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (matrix[i][j] <= min && (Q[i] == 0 || Q[j] == 0)) {
min = matrix[i][j];
mini = i; minj = j;
}
else break;
}
}
Q[mini] = Q[minj] = 1;
if(min != 999) summ += min;
cout << "{" << mini +1 << ", " << minj + 1 << "} - " << min << endl;
min = 999;
}
cout << "Weight: " << summ;
return 0;
}
Содержимое 1.txt:
6
0 5 10 14 0 0
5 0 5 6 0 0
10 5 0 7 8 9
14 6 7 0 4 0
0 0 8 4 0 12
0 0 9 0 12 0