hhhhh

本文详细介绍了使用C语言实现Prim算法的过程,该算法用于在给定的图中找到最小生成树。通过findMinKey函数找出关键顶点,逐步构建最小生成树并打印结果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include <stdio.h>

#include <stdbool.h>

 

#define INF 9999

#define V 5 // 图中顶点的数量

 

int findMinKey(int key[], bool mstSet[]) {

    int min = INF;

    int minIndex;

 

    for (int v = 0; v < V; v++) {

        if (mstSet[v] == false && key[v] < min) {

            min = key[v];

            minIndex = v;

        }

    }

 

    return minIndex;

}

 

void printMST(int parent[], int graph[V][V]) {

    printf("Edge \tWeight\n");

    for (int i = 1; i < V; i++) {

        printf("%d - %d \t%d \n", parent[i], i, graph[i][parent[i]]);

    }

}

 

void primMST(int graph[V][V]) {

    int parent[V]; // 用于存储最小生成树中的父节点

    int key[V]; // 用于存储顶点的权值

    bool mstSet[V]; // 用于存储已选中的顶点

 

    for (int i = 0; i < V; i++) {

        key[i] = INF;

        mstSet[i] = false;

    }

 

    key[0] = 0; // 将第一个顶点作为起始顶点

    parent[0] = -1; // 第一个顶点没有父节点

 

    for (int count = 0; count < V - 1; count++) {

        int u = findMinKey(key, mstSet);

        mstSet[u] = true;

 

        for (int v = 0; v < V; v++) {

            if (graph[u][v] && mstSet[v] == false && graph[u][v] < key[v]) {

                parent[v] = u;

                key[v] = graph[u][v];

            }

        }

    }

 

    printMST(parent, graph);

}

 

int main() {

    int graph[V][V] = {

        {0, 2, 0, 6, 0},

        {2, 0, 3, 8, 5},

        {0, 3, 0, 0, 7},

        {6, 8, 0, 0, 9},

        {0, 5, 7, 9, 0}

    };

 

    primMST(graph);

 

    return 0;

}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值