POJ_1258_Agri-Net(USACO 102)_最小生成树
来源:互联网 发布:如何防范网络恐怖 编辑:程序博客网 时间:2024/06/10 01:30
此题为一道简单的最小生成树问题,输入一个 n*n 的邻接矩阵,然后在图上找最小生成树即可。
我用Prim算法解的此题,算法思路也很简单,就是贪心。首先先随便把一个点加入到树中,然后不断地由此扩展其他的点,加边的过程就是贪心,即每次加入树的边都是当前与树上节点相连的边中最短的边。
算法的证明也很简单,就是反证法,很好证明,引用他人证明:
简单证明prim算法
反证法:假设prim生成的不是最小生成树
1).设prim生成的树为G0
2).假设存在Gmin使得cost(Gmin)小于cost(G0),则在Gmin中存在 < u,v >不属于G0
3).将 < u,v > 加入G0中可得一个环,且 < u,v > 不是该环的最长边(这是因为 < u,v > ∈Gmin)
4).这与prim每次生成最短边矛盾
5).故假设不成立,命题得证
详解:http://www.cnblogs.com/biyeymyhjob/archive/2012/07/30/2615542.html
#include<iostream>#include<cstdio>#include<vector>#include<cstring>using namespace std;const int N=1050;int n,a,sum,d[N];bool v[N];vector <int> E[N],W[N];int prim(){ sum=0; memset (d,0x3f,sizeof(d)); v[1]=true; for (int i=0;i<E[1].size();i++) { int v=E[1][i]; int w=W[1][i]; if(w<d[v]) d[v]=w; } for (int i=1;i<=n-1;i++) { int minid=-1,minw=0x3f3f3f3f; for (int j=1;j<=n;j++) { if (v[j]==true) continue; if (d[j]<minw) { minw=d[j]; minid=j; } } if (minid==-1) return 2147483640; v[minid]=true; sum+=minw; for (int j=0;j<E[minid].size();j++) { int v=E[minid][j],w=W[minid][j]; if(d[v]>w) d[v]=w; } } return sum;}int main(){ while (cin>>n) { memset (v,false,sizeof(v)); for (int i=1;i<=n;i++) { E[i].clear(); W[i].clear(); } for (int i=1;i<=n;i++) for (int j=1;j<=n;j++) { scanf ("%d",&a); if(a!=0) { E[i].push_back(j); W[i].push_back(a); } } printf ("%d\n",prim()); } return 0;}
0 0
- POJ_1258_Agri-Net(USACO 102)_最小生成树
- USACO-Section 3.1 Agri-Net(最小生成树[Prim])
- 【USACO】Agri-Net最短网络(最小生成树)
- USACO Agri-Net,最小生成树
- [usaco]Agri-Net(使用最小生成树算法)
- USACO section 3.1 Agri-Net(最小生成树,prim)
- USACO Section 3.1 Agri-Net(最小生成树Prime算法)
- USACO 3.1 Agri-Net 最短网络 (最小生成树)
- USACO 3.1 Agri-Net 最短网络 (最小生成树)
- USACO 3.1 Agri-Net 最短网络 (最小生成树)
- USACO 3.1 Agri-Net 最短网络 (最小生成树)
- [最小生成树]USACO 3.1 Agri-Net 最短网络
- USACO 3.1 Agri-Net 最短网络 (最小生成树)
- USACO 3.1 Agri-Net 最短网络 (最小生成树)
- USACO 3.1 Agri-Net 最短网络 (最小生成树)
- USACO 3.1 Agri-Net 最短网络 (最小生成树)
- USACO 3.1 Agri-Net 最短网络 (最小生成树)
- USACO 3.1.1 Agri-Net 最短网络(最小生成树Prime算法)
- android 减小apk安装包大小方法及相关优化
- ANDROID – TOOLBAR STEP BY STEP
- 实习杂记(24):ant replace replaceregexp
- MAC Jenkins搭建过程和遇到的问题!
- Android 获取系统时间的三种方式
- POJ_1258_Agri-Net(USACO 102)_最小生成树
- Android OkHttp完全解析 是时候来了解OkHttp了
- MinnowBoard Turbot/Max GPIO使用
- 【复习】servlet之HttpServletRequest
- 处理日志小工具:GetFromFile快速从日志大文件中找到想要的报错信息
- 练习4-9 以上介绍的getch与ungetch函数不能正确地处理压回的EOF。考虑压回EOF时应该如何处理?请实现你的设计方案
- 小玩文件2
- android canvas 画闹钟 圆弧
- redis持久化策略