标签:des blog io os sp for 数据 div log
3 2 1 2 1 1 3 1 1 0
2 0
#include <iostream>
#include <string>
#include <stdio.h>
#include <string.h>
#define INF 99999999
using namespace std;
int sum;
int map[110][110];
int cost[110];
bool vis[110];
void prim(int n) //普利姆 最小生成树算法实现
{
sum=0;
int i, j, pos, mincost;
memset(vis, false, sizeof(vis));
for(i=1; i<=n; i++)
{
cost[i]=map[1][i];
}
vis[1]=true;
for(i=1; i<n; i++)
{
mincost=INF;
for(j=1; j<=n; j++)
{
if(!vis[j] && mincost>cost[j] )
{
mincost=cost[j];
pos=j;
}
}
vis[pos]=true;
sum+=cost[pos];
for(j=1; j<=n; j++)
{
if(!vis[j] && map[pos][j]<cost[j] )
{
cost[j]=map[pos][j];
}
}
}
}
int main()
{
int n, m;
int i, j;
int u, v, w;
while(cin>>n>>m)
{
for(i=0; i<=n; i++)
{
for(j=0; j<=n; j++)
{
map[i][j]=INF;
}
}
for(i=0; i<m; i++)
{
cin>>u>>v>>w;
if(map[u][v] > w)
{
map[u][v]=w;
map[v][u]=w;
}
}
prim(n);
cout<<sum<<endl;
}
return 0;
}
数据结构之 图论---最小生成树(prim + kruskal)
标签:des blog io os sp for 数据 div log
原文地址:http://www.cnblogs.com/yspworld/p/4093559.html