http://blog.youkuaiyun.com/wangjian8006/article/details/7875157
using namespace std;
#define MAXM 900
#define MAXV 30
#define INF 1<<29
int map[MAXV][MAXV],n,d[MAXV],vis[MAXV];
void prim()
{
int i,j,mi,v;
for(i=0;i<n;i++)
{
d[i]=map[0][i];
vis[i]=0;
}
for(i=1;i<=n;i++)
{
mi=INF;
for(j=0;j<n;j++)
{
if(!vis[j]&&mi>d[j])
{
v=j;
mi=d[j];
}
vis[v]=1;
for(j=0;j<n;j++)
{
if(!vis[j]&&d[j]>map[v][j])
{
d[j]=map[v][j];
}
}
}
}
for(i=1;i<n;i++)
d[0]+=d[i];
cout<<d[0]<<endl;
}
typedef struct
{
int s,t,w;
}Edge;
int esum,set[MAXV];//顶点的总数为MAXV 边的总数为esum
Edge edge[MAXM];//边集合
int find(int x)
{
if(x!=set[x])
{
return set[x]=find(set[x]);
}
else
return x;
}
bool Union(int a,int b)
{
int fa,fb;
fa=find(a);
fb=find(b);
if(fa==fb)return 0;
set[fa]=fb;
return 1;
}
//注意在调用Kruskal之前首先对边进行排序
void kruskal()
{
int i,ans=0;
for(i=0;i<esum;i++)//边的总数 esum
{
if(Union(edge[i].s,edge[i].t))
{
ans+=edge[i].w;
}
}
cout<<ans<<endl;
}
int main()
{
return 0;
}