贪心算法解决最小生成树c++简单程序
时间: 2023-11-21 21:54:46 浏览: 98
贪心算法是一种常用的算法思想,可以用来解决很多问题,其中包括最小生成树问题。下面是一个简单的C++程序,用贪心算法求解最小生成树:
```C++
#include <iostream>
#include <algorithm>
using namespace std;
const int MAXN = 1005;
const int INF = 0x3f3f3f3f;
int n, m;
int g[MAXN][MAXN];
int d[MAXN];
bool vis[MAXN];
int prim() {
fill(d, d + n + 1, INF);
fill(vis, vis + n + 1, false);
d[1] = 0;
int ans = 0;
for (int i = 1; i <= n; i++) {
int u = -1;
for (int j = 1; j <= n; j++) {
if (!vis[j] && (u == -1 || d[j] < d[u])) {
u = j;
}
}
vis[u] = true;
ans += d[u];
for (int v = 1; v <= n; v++) {
if (!vis[v] && g[u][v] < d[v]) {
d[v] = g[u][v];
}
}
}
return ans;
}
int main() {
cin >> n >> m;
fill(g[0], g[0] + MAXN * MAXN, INF);
for (int i = 1; i <= m; i++) {
int u, v, w;
cin >> u >> v >> w;
g[u][v] = g[v][u] = w;
}
int ans = prim();
cout << ans << endl;
return 0;
}
```
程序中使用了邻接矩阵来存储图,使用了Prim算法来求解最小生成树。具体来说,程序中的prim函数实现了Prim算法的过程,首先初始化距离数组d和访问数组vis,然后从第一个节点开始,每次选择距离最小的未访问节点,并将其加入生成树中,同时更新距离数组d。最后返回生成树的权值和即可。
阅读全文
相关推荐
![doc](https://img-home.csdnimg.cn/images/20241231044833.png)
![-](https://img-home.csdnimg.cn/images/20241231044833.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![-](https://img-home.csdnimg.cn/images/20241231044955.png)
![-](https://img-home.csdnimg.cn/images/20241231044955.png)
![-](https://img-home.csdnimg.cn/images/20241231044955.png)
![-](https://img-home.csdnimg.cn/images/20241231045021.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)