ZOJ 1203 Swordfish ( prim )
2010-09-14 19:04
375 查看
我受不鸟最小生成树的题目了,怎么看着都这么水,难道是我挑的题水?
这个题我都没有去调试,编译成功之后就提交了,果然AC....
题中给出所有点的坐标,这样便可知道所有点之间的距离,用临界矩阵存,顺便用prim,水阿~
这个题我都没有去调试,编译成功之后就提交了,果然AC....
题中给出所有点的坐标,这样便可知道所有点之间的距离,用临界矩阵存,顺便用prim,水阿~
#include<stdio.h> #include<stdlib.h> #include<math.h> #include<string.h> const double INF = 99999999; double dist[101]; double mat[101][101]; int flag[101]; struct point { double x,y; } a[101],t; int main(void) { int n,i,j,now,start=1; double min,sum; while( scanf("%d",&n) && n ) { for( i = 1; i <= n; i++ ) scanf("%lf%lf",&a[i].x,&a[i].y); for( i = 1; i <= n; i++ ) for( j = 1; j <= n; j++ ) { if( i==j ) mat[i][j] = 0; else { mat[i][j] = sqrt((a[i].x-a[j].x)*(a[i].x-a[j].x) +(a[i].y-a[j].y)*(a[i].y-a[j].y)); } } for( i = 1; i <= n; i++) { dist[i] = INF; flag[i] = 0; } dist[now=1] = 0; flag[1] =1; for( i= 1,sum=0; i <n ;i++) { for( j = 1; j <= n; j++) if( !flag[j] && dist[j] > mat[now][j] ) dist[j] = mat[now][j]; for( j = 1,min = INF; j <= n; j++) if( !flag[j] && dist[j] < min ) min = dist[now = j]; flag[now]=1; sum += min; } if( start == 1) printf("Case #%d:/n",start++); else printf("/nCase #%d:/n",start++); printf("The minimal distance is: %.2lf/n",sum); } return 0; }
相关文章推荐
- ZOJ 1203 Swordfish(最小生成树Prim)
- Prim zoj 1203 Swordfish
- zoj 1203 Swordfish(Prim!)
- zoj 1203 Swordfish 【最小生成树 kruskal && prim】
- ZOJ - 1203 Swordfish (最小生成树 Prim)
- ZOJ 1203 Swordfish 最小生成树 Kruscal && Prim
- zoj 1203 Swordfish【prim】
- ZOJ:1203 Swordfish
- zoj 1203 Swordfish
- ZOJ 1203 Swordfish (经典MST ~ Kruscal)Boruvka算法
- ZOJ 1203 Swordfish(Kruskal 最小树)
- zoj 1203 Swordfish_最小生成树
- zoj-1203-Prim-C++
- zoj 1203 Swordfish(最小生成树))
- ZOJ 1203 Swordfish(最小生成树 kruskal)
- zoj 1203 Swordfish【MST】
- zoj 1203 Swordfish
- zoj1203 Swordfish ——最小生成树入门题_Kruscal算法
- ZOJ-1203 Swordfish
- zoj 1203 Swordfish (kruskal 克鲁斯卡尔)