const int maxn=1000;
const int inf=1e9;
//邻接矩阵版
int G[maxn][maxn];
int n,d[maxn];
bool vis[maxn]={false};
int prime(){
fill(d,d+maxn,inf);
d[0]=0;
int ans=0;
for(int i=0;i<n;i++){
int u=-1,mind=inf;
for(int j=0;j<n;j++) if(!vis[j]&&d[j]<mind){u=j;mind=d[j];}
if(u==-1) return -1;
vis[u]=true;
ans+=d[u];
for(int v=0;v<n;v++) if(!vis[v]&&G[u][v]!=inf&&G[u][v]<d[v]) d[v]=G[u][v];
}
return ans;
}
//邻接表版
struct Node{
int v,dis;
};
vector<Node> Adj[maxn];
int n,d[maxn];
bool vis[maxn]={false};
int prime(){
fill(d,d+maxn,inf);
d[0]=0;
int ans=0;
for(int i=0;i<n;i++){
int u=-1,mind=inf;
for(int j=0;j<n;j++) if(!vis[j]&&d[j]<mind){u=j;mind=d[j];}
if(u==-1) return -1;
vis[u]=true;
ans+=d[u];
for(int j=0;j<Adj[u].size();j++){
int v=Adj[u][j].v;
int dis=Adj[u][j].dis;
if(!vis[v]&&dis<d[v]) d[v]=dis;
}
}
return ans;
}
求解最小生成树——prime算法模板
最新推荐文章于 2024-03-03 17:08:12 发布