poj3625
来源:互联网 发布:蒋欣 长相 知乎 编辑:程序博客网 时间:2024/06/06 00:21
在已有的边上做Prim
#include<iostream>
#include<cmath>
#include<iomanip>
using namespace std;
#define infinity 1000000
class Point2D
{
public:
double x,y;
};
Point2D point[1001];
double map[1001][1001];
double dis[1001];
bool flag[1001];
int n,m;
int main()
{
memset(flag,false,sizeof(flag));
int c,i,j,k;
double len;
double minone;
scanf("%d%d",&n,&m);
for(i=1;i<=n;i++)
cin>>point[i].x>>point[i].y;
//初始化map
for(i=1;i<=n;i++)
map[i][i]=0;
for(i=1;i<=n;i++)
for(j=i+1;j<=n;j++)
{
map[i][j]=sqrt( pow(point[i].x-point[j].x,2)+pow(point[i].y-point[j].y,2) );
map[j][i]=map[i][j];
}
for(k=0;k<m;k++)
{
cin>>i>>j;
//len+=map[i][j];
map[j][i]=map[i][j]=0.0;
}
//下面用prim求最小生成树
for(k=1;k<=n;k++)
dis[k]=map[1][k];
flag[1]=true;
len=0.0;
for(c=1;c<n;c++)
{
minone=10000000.0;
for(i=1;i<=n;i++)
if(flag[i]==false && dis[i]<minone)
{
k=i;
minone=dis[i];
}
flag[k]=true;
len+=minone;
for(i=1;i<=n;i++)
if(flag[i]==false && map[k][i]<dis[i])
dis[i]=map[k][i];
}
cout<<setiosflags(ios::fixed)<<setprecision(2)<<len<<endl;
return 0;
}
- poj3625
- poj3625
- POJ3625 Building Roads
- POJ3625—Prim实现
- poj3625 - Building Roads
- poj3625 解题报告
- POJ3625 最小生成树
- POJ3625 Building Roads
- POJ3625 Building Roads
- POJ3625 Building Roads
- poj3625——Building Roads
- poj3625 最小生成树 Prim
- 最小生成树模板(poj3625)
- poj3625 Building Roads(最小生成树)
- POJ3625 Building Roads(最小生成树,Kruskal)
- POJ3625—最小生成树+heap的实现
- IOUtils 单元(6): TPath(结构体)路径的提取和处理
- 关于Flash Builder 4.x的概要分析
- IOUtils 单元(7): TFile 文件操作
- 使用CPU时间戳进行高精度计时
- poj1189
- poj3625
- 魔方阵
- 用协议分析工具学习TCP/IP
- 数组计算阶乘
- 杨辉三角(非原创)
- 打印所有文件路径
- HTML5设计原理
- 每日设计模式——工厂方法模式
- 谷歌地图与高德地图的一个差异