开始熟悉一下数据结构了

最小生成树之prim

代码

poj1258
#include<iostream>
using namespace std;
#include<cstring>
#define Maxint 0x3f3f3f3f
#define N 110
int map[N][N],low[N],vis[N];
int n;
int prim()
{
    int i,j,pos,min,result=0;
    memset(vis,0,sizeof(vis));
    vis[1]=1;
    pos=1;
    for(i=1;i<=n;i++){
        if(i!=pos)
            low[i]=map[pos][i];
    }
    for(i=1;i<n;i++){
        min=Maxint;
        for(j=1;j<=n;j++)
            if(vis[j]==0&&min>low[j]){
                min=low[j];
                pos=j;
            }
    result+=min;
        //cout<<result<<' ';
        vis[pos]=1;
        for(j=1;j<=n;j++)
            if(vis[j]==0&&low[j]>map[pos][j])
                low[j]=map[pos][j];
    }
    return result;
}
int main()
{
    int i,j,ans,v;
    while(cin>>n){
        memset(map,Maxint,sizeof(map));
        for(i=1;i<=n;i++){
            for(j=1;j<=n;j++){
                cin>>v;
                map[i][j]=map[j][i]=v;
            }
        }
        ans=prim();
        cout<<ans<<endl;
    }
    return 0;
}

原文地址:https://www.cnblogs.com/ACWQYYY/p/4372051.html