一个我认为比较好的Spfa模板(使用邻接表和队列实现)

全局准备工作
int N, X;	//N为点数 X为源点
int head[MAXN];	//head[src]表示以head为出发点的邻接表表头在数组Adj中的位置,开始时所有元素初始化为-1
int nodeP;	//在邻接表和指向表头的head数组中定位用的记录指针,开始时初始化为0
int dist[MAXN];	//储存到源节点的距离,在Spfa()中初始化
bool vis[MAXN];	//这里vis作inqueue解释会更好,出于习惯使用了vis来命名,在Spfa()中初始化
 Node定义 
struct Node {
    int v, w, next;
}Adj[MAXM];
v即vertex,这里意思相当于被指向的点to,w相当于weight,代表边权,next用来指向在Adj中下一个从相同src出发的边指向的点
 
 addEdge函数 
void addEdge(int src, int to, int weight)
{
    Adj[nodeP].v = to;
    Adj[nodeP].w = weight;
    Adj[nodeP].next = head[src];
    head[src] = nodeP++;
}
addEdge(a, b, w)作用是在数组Adj中留下一条记录了去向和边权的记录,且其next指向表中相同src指向的下一个点,同时更新了head表头
 
 Spfa主体 
void Spfa()
{
    queue<int> que;
    
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值