最小生成树(prime)

来源:互联网 发布:天下3帅气男号捏脸数据 编辑:程序博客网 时间:2024/06/07 00:17
#include <iostream>#include <cstdio>#include <algorithm>#include <cmath>#include <cstring>using namespace std;const int INF = 0x3f3f3f3f;int mp[105][105], n;int prime(){    int sum=0;    int vis[105];    int cost[105];    cost[0] = 0;    for(int i=1; i<n; i++)    {        cost[i] = mp[0][i];        vis[i] = 0;    }    vis[0] = 1;    int k;    for(int i=1; i<n; i++)    {        int mi = INF;        for(int j=0; j<n; j++)        {            if(!vis[j] && cost[j]<mi)            {                mi = cost[j];                k = j;            }        }        sum+=mi;        vis[k] = 1;        for(int j=0; j<n; j++)        {            if(!vis[j] && mp[k][j] < cost[j])            {                cost[j] = mp[k][j];            }        }    }    return sum;}int main(){    int m, a, b, c;    cin >> n >> m;    memset(mp, 0, sizeof(mp));    for(int i=0; i<m; i++)    {        cin >> a >> b >> c;        mp[a][b] = mp[b][a] = c;    }    for(int i=0; i<n; i++)    {        for(int j=0; j<n; j++)        {            if(mp[i][j] == 0)                mp[i][j] = INF;        }    }    cout << prime() << endl;    return 0;}

1 0