您的位置:首页 > 其它

SPFA

2016-07-28 15:29 417 查看
[b]SPFA模版[/b]

单源:假设1为起点,适合于稀疏图,O(边数)

queue<int> q;
while(!q.empty())
{
int now=q.front();
q.pop();
for(int e=head[now];e!=-1;e=map[e].next)
{
if(dis[map[e].y]==-1)//没进过队
{
/*1*/q.push(map[e].y);
/*2*/dis[map[e].y]=dis[now]+1;
}
}
}


BFS求一个问题入队一次

while(!e.empty())
{
int now=q.front(),q.pop();
for()//省略
{
flag[now]=0;
if(dis[now]+map[e].w<dis[map[e.y]])
{
dis[map[e].y]=map[e].w+dis[now];
if(flag[map[e].y]==0)
{
q.push(map[e].y);
flag[map[e].y]=1;
}
}
}
}


  

SPFA入队多次,更加适合求两点之间的最短路,空间少,时间也少,但是如果求多源最短路还是建议大家用Floyd算法
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: