题意很简单,给你一个用邻接矩阵形式存储的有n个顶点的无向图,让你求它的最小生成树并求出在这个生成树里面最大的边的权值。
思路:最小生成树算法:
代码如下:
#include <iostream>
using namespace std;
const int Max=502;
const int inf=0xfffffff;
int n,ans;
int map[Max][Max],dis[Max];
int min(int a,int b)
{
return a<b?a:b;
}
void prim()
{
int i,now,j,min_edge,min_node;
now=1;
ans=0;
for(i=1;i<=n;i++)
dis[i]=inf;
for (i=1;i<n;i++)
{
dis[now]=-1;
min_edge=inf;
for (j=1;j<=n;j++)
if (j!=now&&dis[j]>=0)
{
dis[j]=min(dis[j],map[now][j]);
if (dis[j]<min_edge)
{
min_edge=dis[j];
min_node=j;
}
}
now=min_node;
if (min_edge>ans)
ans=min_edge;
}
}
int main()
{
int i,j,t;
cin>>t;
while (t--)
{
cin>>n;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
cin>>map[i][j];
prim();
cout<<ans<<endl;
}
return 0;
}
关于最小生成树的另外一种算法,未完待续……