图论-SPFA算法
程序员文章站
2022-04-30 09:43:04
...
上篇说了 邻接表
这是 邻接表 与 spfa算法 操作
思想: 首先让起始点入队,进行第一次松弛操作,更新所有可以进行松弛操作的值,之后让所有进行了松弛操作但没有进入队列的点进入队列,直到队列为空,不断更新dis的值,最后得到的就是最短路径。
void SPFA(int t) { //t是起始点
int i;
queue<int>q; //创建队列
q.push(t);
for(int i=1; i<=m; i++) { //初始化
dis[i]=INF;
vis[i]=0;
}
dis[t]=0;
vis[t]=1;
while(!q.empty()) {
int u = q.front();
q.pop();
vis[u]=0; // u 表示起始点 e[i].to 终点
for(int i=head[u]; i!=-1; i=e[i].nex) { //遍历边
int v = e[i].to;
if(dis[u]+e[i].cost<dis[v]) { //如果可以进行松弛操作
dis[v]=dis[u]+e[i].cost;
if(!vis[v]) { //并且经过松弛的点没有入队,那么让其入队
q.push(v);
vis[v]=1;
}
}
}
}
}
上一篇: 【图论】关于Dijkstra与Spfa算法区别的思考和分析
下一篇: grid布局学习案例