typedef struct ac{
int v,cost;
ac(){}
ac(int _v,int _c):v(_v),cost(_c){}
};
vector<ac> Adj[maxn];
int G[maxv][maxv];
int d[maxn],n,m;
bool vis[maxn];
int Prim(int v0){
int sum = 0;
memset(d,INF,sizeof(d));
memset(vis,false,sizeof(vis));
d[v0] = 0;
for(int i=0;i<n;i++){
int MIN = INF,u = -1;
for(int j = 0;j<n;j++){
if(!vis[j]&&d[j]<MIN){
MIN = d[j];
u = j;
}
}
if(u==-1) return -1;
sum += MIN;
vis[u] = true;
/*
邻接矩阵版
*/
for(int v = 0;v<n;v++){
if(vis[v]==false&&d[v]>G[u][v])
d[v] = G[u][v];
}
/*
邻接表版
*/
for(int j=0;j<Adj[u].size();j++){
int v = Adj[u][j].v;
if(vis[v]==false&&d[v]>Adj[u][j].cost)
d[v] = Adj[u][j].cost;
}
}
return sum;
}
Prim算法
最新推荐文章于 2024-02-06 09:12:02 发布