0
点赞
收藏
分享

微信扫一扫

最短网络


题目:

最短网络_i++


题解:

prim

#include <bits/stdc++.h>
using namespace std;
int pos[105][105],dis[105],vis[105];
int n;
int inf=0x3f3f3f3f;
int prim()
{
memset(dis,inf,sizeof(dis));
int res=0;
for(int i=0;i<n;i++)
{
int t=-1;
for(int j=1;j<=n;j++)
{
if(!vis[j]&&(t==-1||dis[j]<dis[t])) t=j;
}
if(i&&dis[t]==inf) return inf;

if(i) res+=dis[t];
vis[t]=1;
for(int j=1;j<=n;j++) dis[j]=min(dis[j],pos[t][j]);

}
return res;
}
int main()
{
cin>>n;
for(int i=0;i<=n;i++)
{
for(int j=0;j<=n;j++)
{
pos[i][j]=i==j?0:inf;
}
}
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
cin>>pos[i][j];
}
}
int t=prim();
cout<<t<<endl;
return 0;
}


举报

相关推荐

0 条评论