priority_queue<node> q;
int prim(int n)
{
int ans=0;
memset(vis,0,sizeof(vis));
for (int i=0;i<=n;i++) dis[i]=inf;
while (!q.empty())q.pop();
q.push(node(0,0));
dis[0]=0;
while (!q.empty())
{
int i=q.top().id;
q.pop();
if (vis[i]) continue;
vis[i]=1;
ans+=dis[i];
for (int j=fir[i];j;j=e[j].next)
{
int k=e[j].t;
if (!vis[k] && e[j].val<dis[k])
{
dis[k]=e[j].val;
q.push(node(k,dis[k]));
}
}
}
return ans;
}
priority_queue<node> q;
void dij(int st)
{
for (int i=1;i<=n;i++) dis[i]=inf;
memset(vis,0,sizeof(vis));
while (!q.empty()) q.pop();
q.push(node(st,0));
dis[st]=0;
while (!q.empty())
{
int i=q.top().id;
q.pop();
if (vis[i]) continue;
vis[i]=1;
for (int j=fir[i];j;j=e[j].next)//前向星法遍历图
{
int k=e[j].t;
if (!vis[k]&&dis[i]+e[j].val<dis[k])
{
dis[k]=dis[i]+e[j].val;
q.push(node(k,dis[k]));
}
}
}
}
prim加堆优化与dij算法加堆优化
最新推荐文章于 2024-08-01 19:29:55 发布