#include <stdio.h>
#define V 11 // кількість вершин у графі
#define INF 999999 // "нескінченність"
int minKey(int key[], int mstSet[]) {
int min = INF, min_index;
for (int v = 0; v < V; v++)
if (mstSet[v] == 0 && key[v] < min)
min = key[v], min_index = v;
return min_index;
}
void printMST(int parent[], int graph[V][V]) {
int total = 0;
printf("\nОстовне дерево (метод Прима):\n");
for (int i = 1; i < V; i++) {
printf("%d - %d %d\n", parent
[i
] + 1, i
+ 1, graph
[i
][parent
[i
]]); total += graph[i][parent[i]];
}
printf("\nМінімальна вага остового дерева = %d\n", total
); }
void primMST(int graph[V][V]) {
int parent[V]; // масив результату
int key[V]; // мінімальна вага ребра для кожної вершини
int mstSet[V]; // чи входить вершина в МОД
// ініціалізація
for (int i = 0; i < V; i++)
key[i] = INF, mstSet[i] = 0;
key[0] = 0; // починаємо з вершини 1
parent[0] = -1; // корінь
printf("ЕТАПИ РОБОТИ АЛГОРИТМУ ПРИМА:\n");
for (int count = 0; count < V - 1; count++) {
int u = minKey(key, mstSet);
mstSet[u] = 1;
printf("\nДодаємо вершину %d у дерево\n", u
+ 1);
for (int v = 0; v < V; v++) {
if (graph[u][v] && mstSet[v] == 0 && graph[u][v] < key[v]) {
parent[v] = u;
key[v] = graph[u][v];
printf("Оновлено: ребро %d — %d (вага %d)\n", u + 1, v + 1, graph[u][v]);
}
}
}
printMST(parent, graph);
}
int main() {
// Матриця суміжності для графа з твого фото
int graph[V][V] = {
//1 2 3 4 5 6 7 8 9 10 11
{0,5,2,3,0,0,0,0,0,0,0}, // 1
{5,0,5,0,5,7,0,0,0,0,0}, // 2
{2,5,0,4,7,4,7,0,1,0,0}, // 3
{3,0,4,0,0,7,7,0,0,0,0}, // 4
{0,5,7,0,0,4,0,2,0,0,0}, // 5
{0,7,4,7,4,0,1,0,2,0,0}, // 6
{0,0,7,7,0,1,0,0,3,3,0}, // 7
{0,0,0,0,2,0,0,0,0,0,4}, // 8
{0,0,1,0,0,2,3,0,0,6,6}, // 9
{0,0,0,0,0,0,3,0,6,0,4}, // 10
{0,0,0,0,0,0,0,4,6,4,0} // 11
};
primMST(graph);
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CgojZGVmaW5lIFYgMTEgICAgICAgIC8vINC60ZbQu9GM0LrRltGB0YLRjCDQstC10YDRiNC40L0g0YMg0LPRgNCw0YTRlgojZGVmaW5lIElORiA5OTk5OTkgIC8vICLQvdC10YHQutGW0L3Rh9C10L3QvdGW0YHRgtGMIgoKaW50IG1pbktleShpbnQga2V5W10sIGludCBtc3RTZXRbXSkgewogICAgaW50IG1pbiA9IElORiwgbWluX2luZGV4OwoKICAgIGZvciAoaW50IHYgPSAwOyB2IDwgVjsgdisrKQogICAgICAgIGlmIChtc3RTZXRbdl0gPT0gMCAmJiBrZXlbdl0gPCBtaW4pCiAgICAgICAgICAgIG1pbiA9IGtleVt2XSwgbWluX2luZGV4ID0gdjsKCiAgICByZXR1cm4gbWluX2luZGV4Owp9Cgp2b2lkIHByaW50TVNUKGludCBwYXJlbnRbXSwgaW50IGdyYXBoW1ZdW1ZdKSB7CiAgICBpbnQgdG90YWwgPSAwOwoKICAgIHByaW50ZigiXG7QntGB0YLQvtCy0L3QtSDQtNC10YDQtdCy0L4gKNC80LXRgtC+0LQg0J/RgNC40LzQsCk6XG4iKTsKICAgIHByaW50Zigi0KDQtdCx0YDQviAgICDQktCw0LPQsFxuIik7CgogICAgZm9yIChpbnQgaSA9IDE7IGkgPCBWOyBpKyspIHsKICAgICAgICBwcmludGYoIiVkIC0gJWQgICAgJWRcbiIsIHBhcmVudFtpXSArIDEsIGkgKyAxLCBncmFwaFtpXVtwYXJlbnRbaV1dKTsKICAgICAgICB0b3RhbCArPSBncmFwaFtpXVtwYXJlbnRbaV1dOwogICAgfQoKICAgIHByaW50ZigiXG7QnNGW0L3RltC80LDQu9GM0L3QsCDQstCw0LPQsCDQvtGB0YLQvtCy0L7Qs9C+INC00LXRgNC10LLQsCA9ICVkXG4iLCB0b3RhbCk7Cn0KCnZvaWQgcHJpbU1TVChpbnQgZ3JhcGhbVl1bVl0pIHsKICAgIGludCBwYXJlbnRbVl07ICAgLy8g0LzQsNGB0LjQsiDRgNC10LfRg9C70YzRgtCw0YLRgwogICAgaW50IGtleVtWXTsgICAgICAvLyDQvNGW0L3RltC80LDQu9GM0L3QsCDQstCw0LPQsCDRgNC10LHRgNCwINC00LvRjyDQutC+0LbQvdC+0Zcg0LLQtdGA0YjQuNC90LgKICAgIGludCBtc3RTZXRbVl07ICAgLy8g0YfQuCDQstGF0L7QtNC40YLRjCDQstC10YDRiNC40L3QsCDQsiDQnNCe0JQKCiAgICAvLyDRltC90ZbRhtGW0LDQu9GW0LfQsNGG0ZbRjwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBWOyBpKyspCiAgICAgICAga2V5W2ldID0gSU5GLCBtc3RTZXRbaV0gPSAwOwoKICAgIGtleVswXSA9IDA7ICAgICAgICAvLyDQv9C+0YfQuNC90LDRlNC80L4g0Lcg0LLQtdGA0YjQuNC90LggMQogICAgcGFyZW50WzBdID0gLTE7ICAgIC8vINC60L7RgNGW0L3RjAoKICAgIHByaW50Zigi0JXQotCQ0J/QmCDQoNCe0JHQntCi0Jgg0JDQm9CT0J7QoNCY0KLQnNCjINCf0KDQmNCc0JA6XG4iKTsKCiAgICBmb3IgKGludCBjb3VudCA9IDA7IGNvdW50IDwgViAtIDE7IGNvdW50KyspIHsKICAgICAgICBpbnQgdSA9IG1pbktleShrZXksIG1zdFNldCk7CiAgICAgICAgbXN0U2V0W3VdID0gMTsKCiAgICAgICAgcHJpbnRmKCJcbtCU0L7QtNCw0ZTQvNC+INCy0LXRgNGI0LjQvdGDICVkINGDINC00LXRgNC10LLQvlxuIiwgdSArIDEpOwoKICAgICAgICBmb3IgKGludCB2ID0gMDsgdiA8IFY7IHYrKykgewogICAgICAgICAgICBpZiAoZ3JhcGhbdV1bdl0gJiYgbXN0U2V0W3ZdID09IDAgJiYgZ3JhcGhbdV1bdl0gPCBrZXlbdl0pIHsKICAgICAgICAgICAgICAgIHBhcmVudFt2XSA9IHU7CiAgICAgICAgICAgICAgICBrZXlbdl0gPSBncmFwaFt1XVt2XTsKCiAgICAgICAgICAgICAgICBwcmludGYoItCe0L3QvtCy0LvQtdC90L46INGA0LXQsdGA0L4gJWQg4oCUICVkICjQstCw0LPQsCAlZClcbiIsCiAgICAgICAgICAgICAgICAgICAgICAgdSArIDEsIHYgKyAxLCBncmFwaFt1XVt2XSk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9CgogICAgcHJpbnRNU1QocGFyZW50LCBncmFwaCk7Cn0KCmludCBtYWluKCkgewoKICAgIC8vINCc0LDRgtGA0LjRhtGPINGB0YPQvNGW0LbQvdC+0YHRgtGWINC00LvRjyDQs9GA0LDRhNCwINC3INGC0LLQvtCz0L4g0YTQvtGC0L4KICAgIGludCBncmFwaFtWXVtWXSA9IHsKCiAgICAgICAgLy8xIDIgMyA0IDUgNiA3IDggOSAxMCAxMQogICAgICAgIHswLDUsMiwzLDAsMCwwLDAsMCwwLDB9LCAgLy8gMQogICAgICAgIHs1LDAsNSwwLDUsNywwLDAsMCwwLDB9LCAgLy8gMgogICAgICAgIHsyLDUsMCw0LDcsNCw3LDAsMSwwLDB9LCAgLy8gMwogICAgICAgIHszLDAsNCwwLDAsNyw3LDAsMCwwLDB9LCAgLy8gNAogICAgICAgIHswLDUsNywwLDAsNCwwLDIsMCwwLDB9LCAgLy8gNQogICAgICAgIHswLDcsNCw3LDQsMCwxLDAsMiwwLDB9LCAgLy8gNgogICAgICAgIHswLDAsNyw3LDAsMSwwLDAsMywzLDB9LCAgLy8gNwogICAgICAgIHswLDAsMCwwLDIsMCwwLDAsMCwwLDR9LCAgLy8gOAogICAgICAgIHswLDAsMSwwLDAsMiwzLDAsMCw2LDZ9LCAgLy8gOQogICAgICAgIHswLDAsMCwwLDAsMCwzLDAsNiwwLDR9LCAgLy8gMTAKICAgICAgICB7MCwwLDAsMCwwLDAsMCw0LDYsNCwwfSAgIC8vIDExCiAgICB9OwoKICAgIHByaW1NU1QoZ3JhcGgpOwoKICAgIHJldHVybiAwOwp9Cg==