#include <stdio.h>
#include <stdlib.h>
#define inf 999999
bool visit[6] = {false};
int dist[6] = {0};
int graph[6][6] = {
{inf, 7, 4, inf, inf, inf},
{7, inf, 6, 2, inf, 4},
{4, 6, inf, inf, 9, 8},
{inf, 2, inf, inf, inf, 7},
{inf, inf, 9, inf, inf, 1},
{inf, 4, 8, 7, 1, inf}};
int prim (int cur) {
int index = cur;
int sum = 0;
printf("%d ", index);
visit[cur] = true;
for (int i=0; i<6; i++) {//计算cur与其他节点的距离
dist[i] = graph[cur][i];
}
for (int i=1; i<6; i++) {
int min = inf;
for (int j=0; j<6; j++) {
if (!visit[j] && dist[j] < min) {
min = dist[j];
index = j;
}
}
visit[index] = true;
printf("%d ", index);
sum += min;
for (int j=0; j < 6; j++) {
if (!visit[j] && graph[index][j] < dist[j]) {
dist[j] = graph[index][j];
}
}
}
return sum;
}
int main (int argc, char **argv) {
printf("%d", prim(0));
return 0;
}
数据结构:prim算法
最新推荐文章于 2024-04-23 12:00:00 发布