dijkstra
void dijkstra()
{
memset(d,0x3f,sizeof(d));
memset(v,0,sizeof(v));
d[1]=0;
q.push(make_pair(0,1));
while(q.sise())
{
int x=q.top();
if(v[x])continue;
v[x]=1;
for(int i=head[x];i;i=e[i].next)
{
int y=e[i].to;
if(d[y]>d[x]+e[i].z)
{
d[y]=d[x]+e[i].z;
q.push(make_pair(-d[y],y));
}
}
}
}
SPFA
floyed
for(int k=1;k<=n;k++)
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
d[i][j]|=d[i][k]& d[k][j];
}
}
}
本文深入探讨了两种图论中的经典最短路径算法——Dijkstra算法和SPFA(Shortest Path Faster Algorithm)。Dijkstra算法通过优先队列实现,保证找到从起点到所有顶点的最短路径。而SPFA是一种Bellman-Ford算法的优化版本,用于解决负权边问题。文章详细解析了算法的实现过程,并对比了它们的效率和适用场景。
2142

被折叠的 条评论
为什么被折叠?



