POJ 2349 (Prim算法模板)
来源:互联网 发布:双11淘宝电脑打折么 编辑:程序博客网 时间:2024/06/05 02:40
1.模板代码
#include <iostream>#include <cstring>using namespace std;const int SIZE=101;const int INF=0x7fffffff;int a[SIZE][SIZE];int n, m;void init(){ for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) a[i][j]=INF;}void prim(int u0){ int lowcost[SIZE], nearV[SIZE]; int sum=0; for(int i=1;i<=n;i++) {lowcost[i]=a[u0][i]; nearV[i]=u0;} nearV[u0]=-1; lowcost[u0]=0; for(int i=1;i<n;i++) { int minV=INF, v=-1; for(int j=1;j<=n;j++) { if(nearV[j]!=-1 && lowcost[j]<minV) { minV=lowcost[j]; v=j; } } cout<<nearV[v]<<" "<<v<<" "<<minV<<endl; nearV[v]=-1; sum+=minV; for(int j=1;j<=n;j++) { if(nearV[j]!=-1 && lowcost[j]>a[v][j]) { lowcost[j]=a[v][j]; nearV[j]=v; } } } cout<<"MST:"<<sum<<endl;}int main(){ int u,v,w; while(cin>>n>>m) { init(); for(int i=0;i<m;i++){cin>>u>>v>>w; a[u][v]=a[v][u]=w;} cout<<"\n\n"; prim(1); } return 0;}
2.POJ 2349
题意:有P个点,用坐标给出,有两种联系方式:1每个点可以和距离在D以内的点相互联系,2有S个专门的卫星通道,两个点直接联系;
求D最小多少可以把这个图连起来
题解:首先不考虑S个卫星通道,先求最小生成树,用卫星通道把最小生成树中最大的S-1个边代替掉,然后剩下的最大的那条边的值就是能把整个图连起来的D的最小值.
#include <iostream>#include <cmath>#include <cstdio>#include <algorithm>using namespace std;const int SIZE=505;int S, P;int x[SIZE], y[SIZE], cnt;double w[SIZE][SIZE], pur[SIZE];void init(){ for(int i=0;i<P;i++) w[i][i]=0x7fffffff; for(int i=0;i<P;i++) for(int j=i+1;j<P;j++) { double dd; dd=sqrt((x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j])); w[i][j]=w[j][i]=dd; }}void prim(int u0){ int nearV[SIZE]; double lowcost[SIZE]; cnt=0; for(int i=0;i<P;i++) { nearV[i]=u0; lowcost[i]=w[u0][i]; } nearV[u0]=-1; for(int i=1;i<P;i++) { double minV=0x7fffffff; int u=-1; for(int j=0;j<P;j++) { if(nearV[j]!=-1 && minV>lowcost[j]) { minV=lowcost[j]; u=j; } } if(u==-1) {cout<<-1<<endl; return;} nearV[u]=-1; pur[cnt++]=minV; for(int i=0;i<P;i++) { if(nearV[i]!=-1 && lowcost[i]>w[u][i]) { lowcost[i]=w[u][i]; nearV[i]=u; } } } sort(pur,pur+cnt); printf("%.2f\n",pur[cnt-S]);}int main(){ int T; cin>>T; while(T--) { cin>>S>>P; for(int i=0;i<P;i++) cin>>x[i]>>y[i]; init(); prim(0); } return 0;}
- POJ 2349 (Prim算法模板)
- 【最小生成树】(模板-prim算法)poj 1258
- poj 2349 Arctic Network (prim算法)
- poj1258 prim算法(模板)
- POJ 2485(prim 算法)
- poj 1251 (Prim算法)
- POJ 1258(prim算法)
- poj 1258(prim模板题)
- Prim 模板 POJ 3625
- poj-2485-最小生成树prim算法模板
- 最小生成树(prim算法模板)
- 最小生成树-Prim算法(模板)
- Prim算法模板(最小生成树)
- 最小生成树(prim算法)模板
- Prim算法模板
- prim算法模板
- (MST-Prim算法模板)
- prim算法模板
- 创新工场2014笔试算法题汇总
- Option Menu
- 黑马程序员--java技术--多线程
- Java之异常与错误的区别及java的异常体系
- GCD&LCM--AOJ0005
- POJ 2349 (Prim算法模板)
- 黑马程序员--java技术--集合框架
- Windows平台下NS2网络仿真环境的搭建
- 黑马程序员--java技术--IO流
- 黑马程序员--java技术--GUI图形用户界面
- Fedora安装新内核删除久内核
- oracle create table as select
- C++自定义类型的比较常用做法
- 构造函数定义为private,protected