Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- int a[100][100]; //Матр. смеж.
- int t[100][2]; //Итоговое дерево
- int ti = 0; //Сколько ребер в дереве уже есть.
- int u[100]; //Помечаем тут вершины, входящие в U
- void main() {
- setlocale(LC_ALL, "Russian");
- int n;
- cout << "Кол-во вершин: ";
- cin >> n;
- for (int i = 1; i <= n; i++)
- for (int j = 1; j <= n; j++)
- a[i][j] = 1000;
- int v1, v2, c;
- cin >> v1 >> v2 >> c;
- while (v1 != 0 && v2 != 0) {
- a[v1][v2] = c;
- a[v2][v1] = c;
- cin >> v1 >> v2 >> c;
- }
- //-------------------------------
- for (int i = 2; i <= n; i++)
- u[i] = 0;
- u[1] = 1; // В начале алгоритма вершина 1 уже принадлежит U.
- int w1, w2, min;
- do {
- min = 1000;
- for (int i = 1; i <= n; i++) {
- for (int j = 1; j <= n; j++) {
- if (u[i] == 1 && u[j] == 0 && a[i][j] < min) {
- min = a[i][j];
- w1 = i; w2 = j;
- }
- }
- }
- if (min < 1000) {
- cout << "Добавляем в дерево ребро " << w1 << "-" << w2 << " стоимости " << min << endl;
- u[w2] = 1;
- t[ti][0] = w1;
- t[ti][1] = w2;
- ti += 1;
- }
- } while (min < 1000);
- for (int i = 0; i < ti; i++) {
- cout << "Ребро " << (i + 1) << ": " << t[i][0] << "-" << t[i][1] << endl;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement