//自己没有注意数组大小一直在wa
//最小生成树中的prim算法
//一开始没有理解好算法导致用了queue结构
//仔细想想发现做了无用功,只用遍历每一个节点就好了
#include "iostream"
#include "cstring"
#include "queue"
using namespace std;
int n;
int _max;
int _min;
int f[1000][1000];
int vis[200];
int stdis[1000];
int flag;
queue<int>q;
void span(){
_max=0;
for(int i=0;i<n;++i){
stdis[i]=f[0][i];
}
vis[0]=1;
for (int i = 1; i < n; ++i)
{
_min=100001;
for (int j = 0; j < n; ++j)
{
if(_min>stdis[j]&&!vis[j]){
_min=stdis[j];
flag=j;
// cout<<"run"<<flag<<endl;
}
}
_max=max(_max,_min);
vis[flag]=1;
for (int i = 0; i < n; ++i)
{
if(!vis[i]&&stdis[i]>f[flag][i]){
stdis[i]=f[flag][i];
}
}
}
}
int main(){
int c;
cin>>c;
while(c--){
cin>>n;
memset(vis, 0, sizeof(vis));
memset(stdis, 100000, sizeof(stdis));
for (int i = 0; i < n; ++i)
{
for (int j = 0; j < n; ++j)
{
cin>>f[i][j];
}
}
span();
cout<<_max<<endl;
if(c)cout<<endl;
}
}
sicily1090-highways
最新推荐文章于 2016-12-17 12:26:34 发布