2349 Arctic Network prim最小生成树 基础
2011-10-08 12:07
435 查看
图我们构造完成,调用prim算法,把该算法中每一次贪心得到的最小权边存入一个数组中。算法结束后对那个数组sort递减排序。这样,前边最大的s个用那卫星让他们通信去。然后从第s开始配给他们足够功率的对讲机使。
#include<iostream> using namespace std; #include<algorithm> #include<math.h> #define max 505 double map[max][max]; double dis[max]; int s,p; int ta[max],tb[max]; bool vis[max]; double sum[max]; double ca(int x,int y,int a,int b) { double t=(x-a)*(x-a)+(y-b)*(y-b); return sqrt(t); } bool cmp(double x,double y) { return x>y; } int t=1; void prim() { for(int i=1;i<=p;i++) { int temp; double cf=9999999.0; for(int j=1;j<=p;j++) { if(!vis[j]&&dis[j]<cf) { temp=j; cf=dis[j]; } } vis[temp]=true; if(cf==9999999.0) cf=0; sum[t++]=cf; for(int j=1;j<=p;j++) { if(!vis[j]&&dis[j]>map[temp][j]) dis[j]=map[temp][j]; } } return ; } int main() { int n; cin>>n; while(n--) { t=1; memset(vis,false,sizeof(vis)); memset(map,9999999.0,sizeof(map)); scanf("%d%d",&s,&p); for(int i=1;i<=p;i++) scanf("%d%d",&ta[i],&tb[i]); for(int i=1;i<=p;i++) { for(int j=1;j<=p;j++) if(j!=i) map[i][j]=map[j][i]=ca(ta[i],tb[i],ta[j],tb[j]); } vis[1]=true; for(int i=1;i<=p;i++) dis[i]=map[1][i]; prim(); printf("%.2lf\n",sum[s]); } return 0; }
相关文章推荐
- POJ 2349 Arctic Network(最小生成树,第k大边权,基础)
- zoj 1914 || poj 2349 Arctic Network【最小生成树 kruskal && prim】
- poj2349——Arctic Network(最小生成树+prim)
- POJ 2349 Arctic Network 最小生成树 Prim
- POJ 2349 Arctic Network(最小生成树 kruscal or prim)
- Prim最小生成树【poj 2349 Arctic Network;poj 1287 NetWorking】
- POJ 2349 Arctic Network(最小生成树 Prim)
- POJ 2349 Arctic Network(最小生成树之Prim)
- POJ 2349 Arctic Network(Kruskal求最小生成树第k条边的长度)
- POJ 2349 Arctic Network(最小生成树思想)
- poj 2485 Highways prim最小生成树 基础 球最小生成树中得最大边
- poj 2421 Constructing Roads prim最小生成树 基础!!!
- poj 2349 Arctic Network uva 10369(prim or kruscal最小生成树)
- Arctic Network (poj 2349 最小生成树)
- POJ 2349 Arctic Network [最小生成树]
- poj 2349 Arctic Network 最小生成树,求第k大条边
- POJ 2349 Arctic Network (最小生成树)
- POJ 2349 Arctic Network (最小生成树第K大(小)边)
- POJ 2349 Arctic Network(最小生成树中第s大的边)
- 最小生成树基础总结(Prim Kruskal)