Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

БДЗ4 / БДЗ4 Колесников ИВТ-15М Вариант 4

.docx
Скачиваний:
1
Добавлен:
30.05.2025
Размер:
100.63 Кб
Скачать

1) С помощью алгоритма Краскала построить минимальный остов.

Код:

#include <iostream>

#include <vector>

#include <algorithm>

using namespace std;

struct edge {

string node1;

string node2;

int length;

edge(string n1,string n2, int l) {

node1 = n1;

node2 = n2;

length = l;

}

};

bool sorting_edges(edge e1,edge e2) {

return e1.length < e2.length;

}

int main()

{

vector<edge> edges{ {"x1","x2",1},{"x1","x3",2},{"x1","x5",3},{"x1","x6",4},

{"x2","x3",2},{"x2","x5",3},

{"x3","x4",3},

{"x4","x6",3},

{"x5","x6",4},

};

vector<edge> minspantree;

vector<string> used_nodes;

sort(edges.begin(), edges.end(), sorting_edges);

minspantree.push_back(edges[0]);

used_nodes.push_back(edges[0].node1);

used_nodes.push_back(edges[0].node2);

for (int i = 1;i < edges.size();i++) {

if (find(used_nodes.begin(), used_nodes.end(), edges[i].node2)== used_nodes.end()) {

minspantree.push_back(edges[i]);

used_nodes.push_back(edges[i].node2);

}

if (used_nodes.size() == 6)break;

}

for (int i = 0;i < minspantree.size();i++)cout << minspantree[i].node1 << " " << minspantree[i].length << " " <<

minspantree[i].node2 << "\n";

}

Результат:

x1 1 x2

x1 2 x3

x1 3 x5

x3 3 x4

x4 3 x6

2) Найти код Прюфера полученного дерева.

Код:

#include <iostream>

#include <vector>

#include <algorithm>

#include <map>

using namespace std;

struct edge {

int node1;

int node2;

edge(int n1,int n2) {

node1 = n1;

node2 = n2;

}

};

int main()

{

vector<edge> edges{ {1,2},{1,3},{1,5},

{3,4},

{4,6},

};

vector<int> code;

while (edges.size() > 1) {

map<int, int> nodes_num;

int min_num = 6;

for (int i = 0;i < edges.size();i++) {

if (nodes_num.find(edges[i].node1) == nodes_num.end()) {

nodes_num.insert(pair<int,int>(edges[i].node1, 1));

}

else {

nodes_num.at(edges[i].node1) += 1;

}

if (nodes_num.find(edges[i].node2) == nodes_num.end()) {

nodes_num.insert(pair<int, int>(edges[i].node2, 1));

}

else {

nodes_num.at(edges[i].node2) += 1;

}

}

for (auto const& pair : nodes_num) {

auto key = pair.first;

auto val = pair.second;

if (val == 1) if (key < min_num)min_num = key;

}

for (int i = 0;i < edges.size();i++) {

if (edges[i].node1==min_num) {

code.push_back(edges[i].node2);

edges.erase(edges.begin()+i);

break;

}

else if (edges[i].node2 == min_num) {

code.push_back(edges[i].node1);

edges.erase(edges.begin() + i);

break;

}

}

}

for (int i = 0;i < code.size();i++) {

cout << "x" << code[i] << " ";

}

}

Результат:

x1 x1 x3 x4

Соседние файлы в папке БДЗ4