POJ 1258 Agri-Net(最小生成树)
来源:互联网 发布:小众音乐软件 编辑:程序博客网 时间:2024/05/19 05:32
题意:
balabalabala,总之就是给定一个矩阵,求最小生成树
思路:
好久没敲最小生成树,发现已经不会写了。。。。QaQ
这里用了prim算法。大体思路就是把节点放在两个集合s1和s2里。刚开始s1里只有起始点,然后从这个点出发找与它直接相连的离它最近的点,从s2中取出存入s1,把权值加入记录最小生成树大小的sum里,然后再从s1里的点出发,继续找与s1里的点直接相连的最近的点,加入。。。。balabalabala,最后所有点都被加进s1了,这样就得到了最小生成树。。。
代码:
#include <cstdio>#include <iostream>#include <cstring>using namespace std;int edge[100 + 10][100 + 10];int dist[100 + 10];bool vis[100 + 10];int prime(int u0, int n){ memset(vis, false, sizeof(vis)); for(int i = 1; i <= n; i++) dist[i] = edge[u0][i]; vis[u0] = true; int sum = 0; for(int i = 1; i <= n - 1; i++) { int Min = 100000 + 10; int v = 0; for(int j = 1; j <= n; j++) { if(!vis[j] && dist[j] < Min) { v = j; Min = dist[j]; } } vis[v] = true; sum = sum + Min; for(int j = 1; j <= n; j++) if(!vis[j] && edge[v][j] < dist[j]) dist[j] = edge[v][j]; } return sum;}int main(){ int n; while(scanf("%d", &n)!=EOF) { for(int i = 1; i <= n; i++) for(int j = 1; j <= n; j++) scanf("%d", &edge[i][j]); printf("%d\n", prime(1,n)); } return 0;}
0 0
- POJ 1258 Agri-Net(最小生成树)
- POJ 1258 Agri-Net 【最小生成树】
- Agri-Net - POJ 1258 最小生成树
- POJ 1258 Agri-Net 最小生成树
- POJ 1258 Agri-Net(最小生成树)
- POJ 1258 Agri-Net 最小生成树
- POJ 1258 Agri-Net 最小生成树
- poj 1258 Agri-Net(最小生成树)
- poj 1258 Agri-Net 最小生成树
- Poj 1258 Agri-Net【最小生成树】
- poj 1258 Agri-Net 最小生成树
- POJ 1258Agri-Net 最小生成树
- POJ 1258 :Agri-Net(最小生成树)
- POJ 1258 Agri-Net (最小生成树)
- poj 1258 Agri-Net 最小生成树
- 最小生成树-POJ 1258 Agri-Net
- POJ 1258 - Agri-Net(最小生成树)
- POJ 1258 Agri-Net 最小生成树
- [平常积累]
- Qt 拖放
- 上一篇的运行结果图片
- 使用 LINQPad 将linq转换为 lambda表达式 或者 SQL语句
- 全国软件3.考察团组成
- POJ 1258 Agri-Net(最小生成树)
- js format 函数的实现
- java实现接口与继承的关系
- 头文件两个类的相互引用
- 单链表问题
- My97DatePicker除火狐其他浏览器中失效
- mysql主从复制
- Struts2+JQuery+Json实例
- 度申