数据结构:prim算法

#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;
}

猜你喜欢

转载自blog.csdn.net/thelostlamb/article/details/79452259