//自己没有注意数组大小一直在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
最新推荐文章于 2018-01-01 16:01:08 发布
本文介绍使用Prim算法解决最小生成树问题的过程。通过详细解释算法步骤并提供具体实现代码,帮助读者理解如何找到加权图中所有顶点的最小连接成本。文中还分享了作者在实现过程中的经验和教训。
336

被折叠的 条评论
为什么被折叠?



