最小生成树告诉你信息为点的信息,便于构造邻接矩阵,prim上
#include <cstdio>
#include <algorithm>
const int MAXNODE = 505 , inf=65538; //MAXNODE 邻接矩阵的大小 inf 根据题目数据定义为无穷大。
using namespace std;
int Graph[MAXNODE][MAXNODE];
int MinSpace[MAXNODE]; //将最小生成树的所有边全值存在MinSpace数组中。
int n,m;
int main()
{
void Creat_Graph();
void prim();
scanf("%d",&n);
while(n--)
{
scanf("%d",&m);
Creat_Graph();
prim();
sort(MinSpace,MinSpace+m-1); //用sort函数按照升序对MinSpace中的数据进行排序。
printf("%d\n",MinSpace[m-2]); //输出MinSpace中最大的值
}
return 0;
}
void Creat_Graph() //邻接矩阵的形式存储图。
{
for(int i = 0 ; i < m ; i++ )
{
for( int j = 0 ; j < m ; j++ )
{
scanf("%d",&Graph[i][j]);
}
}
}
void prim()
{
int key=0,k;
int LowCost[MAXNODE];
int MinCost,CloseVertex[MAXNODE];
for(int i = 0 ; i< m ; i++)
{
LowCost[i]=Graph[0][i]; //LowCost数组中存储到其他顶点的最短距离。
CloseVertex[i]=0; //CloseVerterx中存放最小生成树的顶点。closeVertex[i]==0 表示该顶点存入最小生成树中。
}
for(int i = 1 ; i < m ; i++ )
{
MinCost=inf;
for(int j = 0 ; j < m ; j++)
{
if(LowCost[j] < MinCost && LowCost[j]!=0)
{
MinCost=LowCost[j]; //LowCost[j]==0,表示j顶点存入最小生成树中。
k=j;
}
}
MinSpace[key++]=MinCost; //将依次得到的最短距离存入MinSpace数组。
LowCost[k]=0;
for(int j = 0 ;j < m ; j++ )
{
if(Graph[k][j]<LowCost[j] && LowCost[j]) //修改其他顶点的边的权值跟最小生成树的顶点序号。
{
LowCost[j]=Graph[k][j];
CloseVertex[j]=k;
}
}
}
}