首页 > 其他分享 >【笔记/模板】Bellman-Ford

【笔记/模板】Bellman-Ford

时间:2024-11-03 14:58:44浏览次数:3  
标签:ver int Bellman Ford return vis dist true 模板

Bellman-Ford求最短路和负环

时间复杂度:\(O(nm)\)

【模板/笔记】Johnson算法

bool Bellman_Ford()
{
    memset(dist, 0x3f, sizeof dist);
    for (int k = 1; k < n; k ++)
        for (int ver = 1; ver <= n; ver ++)
            for (int i = h[ver]; ~i; i = ne[i])
            {
                int to = e[i];
                if (dist[to] > dist[ver] + w[i])
                    dist[to] = dist[ver] + w[i];
            }


    for (int ver = 1; ver <= n; ver ++)
        for (int i = h[ver]; ~i; i = ne[i])
        {
            int to = e[i];
            if (dist[to] > dist[ver] + w[i])
                return false;
        }
    return true;
}

SPFA求最短路

时间复杂度:\(O(E \times V)\)​

vector 存图

struct Edge
{
	int u, w;
};
vector<Edge> g[N];
int dist[N], n, m;
bitset<N> vis;
int spfa()
{
	queue<int> q;
	memset(dist, 0x3f3f3f, sizeof dist);
	dist[1] = 0, vis[1] = true;
	q.push(1);
	while (!q.empty())
	{
		int x = q.front(); q.pop();
		vis[x] = false;
		for (auto y : g[x])
		{
			int v = y.u, w = y.w;
			if (dist[v] > dist[x] + w)
			{
				dist[v] = dist[x] + w;
				if (!vis[v])
				{
					q.push(v); vis[v] = true;
				}
			}
		}
	}
	if (dist[n] == INF) return -114514;
	else return dist[n];
}

链式前向星

bool SPFA(int st)
{
    memset(dist, 0x3f, sizeof dist), hh = 0, tt = -1;
    dist[st] = 0, que[++ tt] = st, vis[st] = true;

    while (hh <= tt)
    {
        int ver = que[hh ++];
        vis[ver] = false;

        for (int i = h[ver]; ~i; i = ne[i])
        {
            int to = e[i];
            if (dist[to] > dist[ver] + w[i])
            {
                dist[to] = dist[ver] + w[i];
                if (++ cnt[to] > n) return false;
                if (!vis[to]) que[++ tt] = to, vis[to] = true;
            }
        }
    }
    return true;
}

标签:ver,int,Bellman,Ford,return,vis,dist,true,模板
From: https://www.cnblogs.com/ThySecret/p/18523438

相关文章

  • 【模板】缺省源
    Debuginlinevoiddebug(){cerr<<'\n';}template<typenameType,typename...Other>inlinevoiddebug(constType&x,constOther&...y){cerr<<x<<'';debug(y...);}#defineDEBUG(a...)cerr<......
  • 【模板】手写基本数据结构
    栈STL模板STL中的stack容器提供了一众成员函数以供调用,常见的包括但不限于如下:创建一个栈:stack<int>stk;修改元素:stk.push(x);将传入的参数插入到栈顶。stk.pop();将栈顶的元素弹出。查询:stk.top();返回栈顶的元素。stk.empty();返回栈是否为空。stk.size......
  • 【模板】素数筛
    模板原题1.寻找因数筛法时间复杂度:\(O(n\sqrtn)\)核心模板代码如下:boolisprime(intn){ if(n<2)returnfalse; //0和1都不是 for(inti=2;i*i<=n;++i) if(n%i==0)returnfalse; //有1和它本身以外的其他因子就不是素数了 returntrue;}2.埃......
  • floyed算法模板
    #include<bits/stdc++.h>#include<vector>usingnamespacestd;intlj[1010][1010];//邻接矩阵//可以换成链式前向星之类的巴拉巴拉,这里用邻接矩阵演示比较清楚intn,m;intflyd[1001][1001];intmain(){ cin>>n>>m; for(inti=1;i<=m;i++){ intu,v,w; cin>>u>>......
  • C++模板元编程 实测
    本文记录在各平台(g++、msvc)中实测《C++模板元编程实战:一个深度学习框架的初步实现》中代码的过程。1.3.2节,作者给出了这一段代码:`templatestructWrapper{templatestructFun_{constexprstaticsize_tvalue=0;};template<>structFun_<int>{constexprst......
  • ElasticSearch7.6.x 模板及滚动索引创建及注意事项
    @目录声明:举例说明创建模板+设置滚动索引+读写判断模板是否存在创建模板应用模板创建索引设置滚动索引添加文档,使用“写”别名查询,使用“读”别名本人先关其他文章链接声明:注意点1:滚动索引是设置索引,而非创建索引,且设置一次结果返回"rolled_over":true,则会按照设定规则创建......
  • 随便写的一点BinTree模板实现
    `#pragmawarning(disable:4996)includeincludeincludeincludetemplatestructBinNode{int_depth;//节点深度int_height;//节点高度T_data;//存储的数据BinNode*_parent;//父节点BinNode*_lChild;//左子节点BinNode*......
  • 常用算法模板
    快速排序defquick_sort(arr):iflen(arr)<=1:#基本情况:如果数组为空或只有一个元素,则返回returnarrelse:pivot=arr[0]#选择基准值(可以选择第一个元素)less_than_pivot=[xforxinarr[1:]ifx<=pivot]#小于等于基准值......
  • 【ChatGPT】让ChatGPT根据固定模板生成报告或文档
    让ChatGPT根据固定模板生成报告或文档在撰写报告或文档时,使用固定模板可以确保内容的统一性和结构的清晰性。利用ChatGPT生成符合特定模板的报告,不仅提高了工作效率,还能确保信息的准确传达。本文将探讨如何设计固定模板并引导ChatGPT生成相应的内容。一、明确报告的目的与......
  • RTX5/FreeRTOS全家桶源码工程综合实战模板集成CANopen组件(2024-10-30)
    【前言】之前的视频教程分享了两期CANopen的专题,配套的例子都是基于裸机的,为了方便大家在OS下使用,本期视频带OS下的支持。CANopen协议栈专题,实战方式系统了解NMT,PDO,SDO,时间戳,同步报文,紧急报文等(2023-10-17)https://www.armbbs.cn/forum.php?mod=viewthread&tid=121438CANopen......