
标题:C++中Prim算法的使用及代码示例
引言:Prim算法是一种常用的最小生成树算法,主要用于解决图论中的最小生成树问题。在C++中,通过合理的数据结构和算法实现,可以有效地使用Prim算法。本文将介绍如何在C++中使用Prim算法,并提供具体的代码示例。
一、Prim算法简介
Prim算法是一种贪心算法,它从一个顶点开始,逐步扩展最小生成树的顶点集合,直到包含所有顶点。它通过不断选择与当前集合相连的最小权重的边来构建最小生成树。
二、Prim算法的实现步骤
立即学习“C++免费学习笔记(深入)”;
三、C++代码示例
下面是使用C++实现Prim算法的代码示例,其中使用了邻接矩阵表示图:
#include<iostream>
#include<queue>
#include<vector>
#include<algorithm>
using namespace std;
const int MAX = 100;
const int INF = 9999;
vector<vector<int>> graph(MAX, vector<int>(MAX, INF));
void prim(int start, int n)
{
vector<int> key(n, INF); // 存储每个顶点到最小生成树的最小权重
vector<bool> visited(n, false); // 标记顶点是否已经加入最小生成树
priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> pq; // 优先队列,按权重升序排列
key[start] = 0; // 起始顶点到自身的权重置为0
pq.push(make_pair(0, start));
while (!pq.empty())
{
int u = pq.top().second;
pq.pop();
visited[u] = true;
for (int v = 0; v < n; v++)
{
if (graph[u][v] != INF && !visited[v] && graph[u][v] < key[v])
{
key[v] = graph[u][v];
pq.push(make_pair(graph[u][v], v));
}
}
}
// 输出最小生成树的边
for (int i = 1; i < n; i++)
{
cout << "Edge: " << i << " - " << key[i] << endl;
}
}
int main()
{
int n, e;
cout << "Enter the number of vertices: ";
cin >> n;
cout << "Enter the number of edges: ";
cin >> e;
cout << "Enter the edges and weights: " << endl;
int u, v, w;
for (int i = 0; i < e; i++)
{
cin >> u >> v >> w;
graph[u][v] = w;
graph[v][u] = w;
}
int start;
cout << "Enter the starting vertex: ";
cin >> start;
cout << "Minimum Spanning Tree edges: " << endl;
prim(start, n);
return 0;
}四、总结
本文介绍了C++中如何使用Prim算法,并提供了一段具体的代码示例。通过使用合适的数据结构和算法实现,可以高效地计算最小生成树。希望本文对您在使用Prim算法解决最小生成树问题时有所帮助。
以上就是如何使用C++中的Prim算法的详细内容,更多请关注php中文网其它相关文章!
c++怎么学习?c++怎么入门?c++在哪学?c++怎么学才快?不用担心,这里为大家提供了c++速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号