hdu 1875 畅通工程再续(最小生成树,基础)
2014-01-16 10:40
465 查看
题目
让人郁闷的题目,wa到死了,必须要把判断10.0和1000.0的条件放到prim函数外面去。如代码所放。。。。
正确的(放在prim外):
错误的!
求知情人告诉我为什么放在里面就不行?
让人郁闷的题目,wa到死了,必须要把判断10.0和1000.0的条件放到prim函数外面去。如代码所放。。。。
正确的(放在prim外):
//2个小岛之间的距离不能小于10米,也不能大于1000米,不能无视! #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<string.h> #include<math.h> #include<algorithm> using namespace std; #define M 110 double mat[M][M]; struct tt { double x,y; }dian[M]; double prim(int n,int sta) { double sum=0.0,dis[M]; int mark[M],i,j; for(i=0;i<n;i++) { dis[i]=mat[sta][i]; mark[i]=0; } mark[sta]=1; for(i=1;i<n;i++) { double minn=999999.0; int flag=-1; for(j=0;j<n;j++) { if(minn>dis[j]&&mark[j]==0&&dis[j]>=10.0&&dis[j]<=1000.0)//放在prim里面是wa的,虽然我不知道为什么 { flag=j; minn=dis[j]; } } if(flag==-1) return -1.0; else { mark[flag]=1; sum+=dis[flag]; for(j=0;j<n;j++) { if(dis[j]>mat[flag][j]) dis[j]=mat[flag][j]; } } } return sum; } int main() { int t,i,j,n; double ans,a; scanf("%d",&t); while(t--) { scanf("%d",&n); for(i=0;i<n;i++) for(j=0;j<n;j++) mat[i][j]=999999.0; for(i=0;i<n;i++) { scanf("%lf%lf",&dian[i].x,&dian[i].y); for(j=0;j<i;j++) { a=sqrt((dian[i].x-dian[j].x)*(dian[i].x-dian[j].x)+(dian[i].y-dian[j].y)*(dian[i].y-dian[j].y)); mat[i][j]=mat[j][i]=a; } } ans=prim(n,0); if(ans<0) printf("oh!\n"); else printf("%.1lf\n",ans*100); } return 0; }
错误的!
求知情人告诉我为什么放在里面就不行?
相关文章推荐
- hdu 1875 畅通工程再续(最小生成树)
- HDOJ题目1875畅通工程再续(基础最小生成树)
- HDU 1875 畅通工程再续 (最小生成树)
- hdu 还是畅通工程 (基础)(最小生成树)(Prim算法 && Kruskal算法)
- HDU 1875 畅通工程再续(最小生成树-Kruskal)
- 【HDU 1863】畅通工程(基础最小生成树,Kruskal算法)
- HDU 1875 畅通工程再续 (最小生成树)
- hdu 1875 畅通工程再续(图论:最小生成树)
- HDU 1875 畅通工程再续 有限制的最小生成树
- HDU - 1875 畅通工程再续(最小生成树)
- hdu 还是畅通工程 (基础)(最小生成树)(Prim算法 && Kruskal算法)
- hdu 1863 畅通工程(最小生成树,基础)
- HDU 1875 畅通工程再续(最小生成树问题)Prim算法
- hdu 还是畅通工程 (基础)(最小生成树)(Prim算法 && Kruskal算法)
- hdu 1875 畅通工程再续(kruskal算法计算最小生成树)
- hdu 1875畅通工程再续(最小生成树)
- hdu 畅通工程续 基础最小生成树★
- hdu 还是畅通工程 (基础)(最小生成树)(Prim算法 && Kruskal算法)
- HDU 1875 畅通工程再续(最小生成树-Kruskal算法)
- HDU 1875 畅通工程再续 (最小生成树 水)