应该用prim,因为不是稀疏图,但是写习惯kruskal…下次写prim(?
写一道水题聊以慰藉……咦忘记写当道路=n-1的时候break(捂脸
#include<iostream>
#include<algorithm>
using namespace std;
#define maxn 10005
int fa[maxn];
typedef struct node
{
int x;
int y;
int c;
}node;
node nod[maxn];
int comp(node a,node b){return a.c<b.c;}
void init(int n)
{
for(int i=1;i<=n;i++)
fa[i]=i;
}
int find(int x)
{
if(fa[x]==x)
return x;
else return fa[x]=find(fa[x]);
}
void uni(int x,int y)
{
int ffx=find(x);
int ffy=find(y);
fa[ffx]=ffy;
}
int main()
{
int n;
while(cin>>n)
{
int temp;
int index=0;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
cin>>temp;
if(i<j)
{
nod[index].c=temp;
nod[index].x=i;
nod[index].y=j;
index++;
}
}
}
init(n);
int ans=0;
int cnt=0;
sort(nod,nod+index,comp);
for(int i=0;i<index;i++)
{
if(find(nod[i].x)!=find(nod[i].y))
{
uni(nod[i].x,nod[i].y);
ans+=nod[i].c;
cnt++;
if(cnt==n-1) break;
}
}
cout<<ans<<endl;
}
}