#include <stdio.h>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <queue>
using namespace std;
const int maxn=300001;
const int inf =0x7ffffff;
struct edge
{
int from,to,w,next;
}e[1000001];
int head[maxn];
int vis[maxn];
int dist[maxn];
int n,m,t;
void add(int i,int j,int w)
{
e[t].from=i;
e[t].to=j;
e[t].w=w;
e[t].next=head[i];
head[i]=t++;
}
void spfa(int s)
{
queue <int> q;
for(int i=1;i<=n;i++)
dist[i]=inf;
memset(vis,false,sizeof(vis));
q.push(s);
dist[s]=0;
while(!q.empty())
{
int u=q.front();
q.pop();
vis[u]=false;
for(int i=head[u];i!=-1;i=e[i].next)
{
int v=e[i].to;
if(dist[v]>dist[u]+e[i].w)
{
dist[v]=dist[u]+e[i].w;
if(!vis[
spfa 模板
最新推荐文章于 2021-08-12 17:02:08 发布
这是一个使用SPFA(Shortest Path Faster Algorithm)算法求解图中两点间最短路径的C++程序模板。程序首先定义了边的结构体,并通过邻接链表存储图。然后,通过队列实现SPFA算法,更新每个节点的最短距离。最后,输入源点和目标点,输出从源点到目标点的最短距离,如果不存在路径则输出-1。
摘要由CSDN通过智能技术生成