Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
求大神,无限WA!#include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> using namespace std; const int infinity=0x3f3f3f3f; const int maxnum=505; double map1[maxnum][maxnum]; bool visited[maxnum]; double low[maxnum]; int nodenum,num; double dist[maxnum]; struct node { double x; double y; }N[505]; double dis(node a,node b) { return sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y)); } int compare(double a,double b) { return a>b; } void prim() { int i,j,pos=1; double Min; memset(visited,0,sizeof(visited));//初始化都未标记 for(i=1;i<=nodenum;i++) { low[i]=map1[pos][i]; } visited[pos]=1;//把1号作为起点 for(i=2;i<=nodenum;i++)//这个i没有其他的意思就是一个循环次数 { Min=infinity;pos=-1;//从1号开始找最小的边 for(j=1;j<=nodenum;j++) { if(!visited[j]&&Min>low[j]) { Min=low[j]; pos=j; } } visited[pos]=1;//做到与1os号最近的边 dist[num++]=Min; // cout<<dist[num-1]<<endl; for(j=1;j<=nodenum;j++) { if(!visited[j]&&low[j]>map1[pos][j]) { low[j]=map1[pos][j];//这个就是替换未被标记的最小权值! } } } } int main() { int times,s,i,j; double ans,ans1; cin>>times; while(times--) { num=0; cin>>s>>nodenum; memset(map1,0,sizeof(map1)); for(i=1;i<=nodenum;i++) { cin>>N[i].x>>N[i].y; } for(i=1;i<nodenum;i++) { for(j=i+1;j<=nodenum;j++) { map1[i][j]=map1[j][i]=dis(N[i],N[j]); } } prim(); sort(dist,dist+num,compare); printf("%.2lf\n",dist[nodenum-s-1]); } } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator