赞
踩
#include<iostream> #include<cstring> using namespace std; #define inf 0x3f3f3f3f int map[1001][1001],dis[1001],vis[1001]; int n,m; void init() { memset(map,inf,sizeof(map)); cin>>n>>m; for(int i=1;i<=n;i++) { map[i][i]=0; } while(m--) { int x,y; cin>>x>>y; map[x][y]=map[y][x]=1; } } //更新vis void Prim(int root) { for(int i=1;i<=n;i++) dis[i]=map[root][i]; vis[root]=1; int min,pos,t=n; while(t--) { min=inf,pos=-1; for(int i=1;i<=n;i++) { if(!vis[i]&&dis[i]<min) { min=dis[i]; pos=i; } } if(pos==-1) break; vis[pos]=1; for(int i=1;i<=n;i++) { if(!vis[i]&&dis[pos]+map[pos][i]<dis[i]) { dis[i]=dis[pos]+map[pos][i]; } } } } int main() { init(); int N; cin>>N; int a[N],tmp; for(int i=0;i<N;i++) { cin>>tmp; memset(vis,0,sizeof(vis)); Prim(tmp); float sum=0; for(int j=1;j<=n;j++) { sum+=dis[j]; } printf("Cc(%d)=%.2f\n",tmp,(n-1)/sum); } }
这道题不要被题目中的10000骗了,在声明数组时设为1001就可以,否则会内存超限
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。