hdu1162(最小生成树prim)
2014-03-13 21:08
211 查看
题目链接:hdu1162
n个点的坐标,将这些点连起来,求最短距离。
prim水过.....
n个点的坐标,将这些点连起来,求最短距离。
prim水过.....
#include <iostream> #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> #include <cstdlib> #include <queue> using namespace std; const int N = 105; double map ; bool use ; double lowcost ; struct node { double x,y; }s[105]; double prim(int v) { int i,j; double sum = 0; for(i = 1; i <= v; i ++) lowcost[i] = map[1][i], use[i] = false; use[1] = true; for(i = 2; i <= v; i ++) { double minn = 1e9; int pos; for(j = 1; j <= v; j ++) if(!use[j] && lowcost[j] < minn) { minn = lowcost[j]; pos = j; } sum += minn; use[pos] = true; for(j = 1; j <= v; j ++) if(!use[j] && map[pos][j] < lowcost[j]) lowcost[j] = map[pos][j]; } return sum; } int main() { int n,i,j; while(~scanf("%d",&n)) { for(i = 1; i <= n; i ++) scanf("%lf%lf",&s[i].x,&s[i].y); for(i = 1; i <= n; i ++) for(j = 1; j <= n; j ++) if(i != j) map[i][j] = sqrt((s[i].x-s[j].x)*(s[i].x-s[j].x)+(s[i].y-s[j].y)*(s[i].y-s[j].y)); else map[i][j] = 1e8; printf("%.2lf\n",prim(n)); } return 0; }
相关文章推荐
- hdu1162 Eddy's picture (prim最小生成树)
- hdu1162 Eddy's picture (最小生成树之prim 算法)
- HDU1162 Eddy's picture 【最小生成树Prim】
- hdu1162 Eddy's picture (最小生成树之prim 算法)
- hdu1162(最小生成树 prim or kruscal模板)
- Prim求解最小生成树
- 无题 (最小生成树+prim)
- Jungle Roads HDU - 1301 (最小生成树 prim)
- Prim---求最小生成树(贪心算法)
- 算法记录---最小生成树【kruskal&&prim】
- HDU1102 最小生成树(已构造好部分边)Prim与Kruskal
- HDU1863 畅通project 【最小生成树Prim】
- 【算法——04】最小生成树——Prim和Kruskal算法
- poj 2485 Highways(kruscal or prim最小生成树)
- 还是畅通工程(prim求最小生成树)
- 图结构练习——最小生成树-prim
- prim求最小生成树——Highways
- 最小生成树prim(普里姆)算法
- Prim && Kruskal 生成MST(最小生成树)及最短路径问题
- 最小生成树kruskal+prim