//求最短总路径中的最大边长,Prim还需要一个Max变量 #include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #include<vector> #include<queue> using namespace std; const int MAXN=510; const int INF=10e8; int k,minn; int c[MAXN][MAXN],lc[MAXN]; bool vis[MAXN]; int Prim(int n) { int Max=0; memset(vis,0,sizeof(vis)); vis[1]=1; for(int i=1;i<=n;i++) lc[i]=c[1][i]; for(int i=1;i<=n-1;i++) { k=-1,minn=INF; for(int j=1;j<=n;j++) { if(!vis[j]&&minn>lc[j]) { minn=lc[j];k=j; } } if(k==-1) break; Max=max(Max,minn); vis[k]=1; for(int j=1;j<=n;j++) if(!vis[j]&&lc[j]>c[k][j]) lc[j]=c[k][j]; } return Max; } int main() { int t,n; scanf("%d",&t); while(t--) { scanf("%d",&n); for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) scanf("%d",&c[i][j]); printf("%d\n",Prim(n)); } return 0; }
原文:http://www.cnblogs.com/atmacmer/p/5199567.html