朴素Dijkstra模板

int g[N][N],dist[N],st[N],n;
int Dijkstra()
{memset(dist,0x3f,sizeof dist);dist[1]=0;for(int i=0;i<n-1;i++){int t=-1;for(int j=1;j<=n;j++) if(!st[j]&&(t==-1||dist[j]<dist[t])) t=j;//找到最近的点st[t]=1;for(int j=1;j<=n;j++) dist[j]=min(dist[j],dist[t]+g[t][j]);//更新}int ans=dist[n];if(ans==0x3f3f3f3f) return -1;return ans;
}

堆优化版的Dijkstra

const int N=1e5*3+10;
typedef pair<int,int> PII;
int h[N],e[N],ne[N],w[N],idx;
int dist[N],n,m,st[N];
void add(int a,int b,int c)
{e[idx]=b,w[idx]=c,ne[idx]=h[a],h[a]=idx++;
}
int Dijkstra()
{memset(dist,0x3f,sizeof dist);dist[1]=0;priority_queue<PII,vector<PII>,greater<PII>>q; q.push({0,1});while(q.size()) {auto temp=q.top(); q.pop();int u=temp.second;if(st[u]) continue;st[u]=1;for(int i=h[u];i!=-1;i=ne[i]){int j=e[i];if(dist[j]>dist[u]+w[i]){dist[j]=dist[u]+w[i];q.push({dist[j],j});}}}int ans=dist[n];if(ans==0x3f3f3f3f) return -1;return ans;
}

Bellman_Ford模板

const int N=1e5+10;
struct edge{int a,b,c;}S[N];
int n,m,k,dist[N],backup[N];//n个点,m条边,选不超过k条边
int solve()
{memset(dist,0x3f,sizeof dist);dist[1]=0;for(int i=0;i<k;i++){memcpy(backup,dist,sizeof dist);for(int j=1;j<=m;j++){int a=S[j].a,b=S[j].b,c=S[j].c;dist[b]=min(dist[b],backup[a]+c);}}return dist[n];
}

spfa模板

const int N=1e5*2+10;
int h[N],e[N],w[N],ne[N],idx;
int st[N],dist[N],n,m;
void add(int a,int b,int c)
{e[idx]=b,w[idx]=c,ne[idx]=h[a],h[a]=idx++;
}
int spfa()
{memset(dist,0x3f,sizeof dist);dist[1]=0; st[1]=1;queue<int>q; q.push(1); while(q.size()){int u=q.front(); q.pop();st[u]=0;for(int i=h[u];i!=-1;i=ne[i]){int j=e[i];if(dist[j]>dist[u]+w[i]){dist[j]=dist[u]+w[i];if(!st[j]) q.push(j),st[j]=1;}}}return dist[n];
}

spfa()判负环

const int N=1e5*3+10;
int h[N],e[N],w[N],ne[N],idx;
int st[N],dist[N],cnt[N],n,m;//cnt[i] 表示到i点的最短路的边数
void add(int a,int b,int c)
{e[idx]=b,w[idx]=c,ne[idx]=h[a],h[a]=idx++;}
bool spfa()
{queue<int>q; for(int i=1;i<=n;i++) q.push(i),st[i]=1;while(q.size()){int u=q.front(); q.pop();st[u]=0;for(int i=h[u];i!=-1;i=ne[i]){int j=e[i];if(dist[j]>dist[u]+w[i]){dist[j]=dist[u]+w[i];cnt[j]=cnt[u]+1;if(cnt[j]>=n) return true;//说明有负环if(!st[j]) q.push(j),st[j]=1;}}}return false;
}

floyd模板

const int N=210;
int dist[N][N],n;
void floyd()
{for(int k=1;k<=n;k++)for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)dist[i][j]=min(dist[i][j],dist[i][k]+dist[k][j]);
}

入门习题:
849. Dijkstra求最短路 I
850. Dijkstra求最短路 II
853. 有边数限制的最短路
851. spfa求最短路
852. spfa判断负环
854. Floyd求最短路

ACM入门之【最短路】相关推荐

  1. C语言oj学生成绩输入和输出,『ACM入门』蓝桥杯ACM训练系统基本输入输出教程

    在介绍训练场的OJ系统之前,首先为大家介绍一下ACM: ACM原代表美国计算机协会,因其举办的ICPC即国际大学生程序设计竞赛而闻名全世界,此项赛事要求学生的在五小时内解决全英文问题,并在效率和速度以 ...

  2. c语言记忆化搜索,HNUSTC语言基础简单数据结构acm入门第一讲搜索.ppt

    C语言基础,简单数据结构,ACM入门讲座搜索部分 Bjut:mark063 2010.10.30 1 Evaluation only. Created with Aspose.Slides for . ...

  3. ACM入门及STL简介(转)

    第一章 新手入门 1.      ACM国际大学生程序设计竞赛简介 1)      背景与历史 1970年在美国TexasA&M大学举办了首次区域竞赛,从而拉开了国际大学生程序设计竞赛的序幕. ...

  4. 【转载】ACM入门 .

    初期: 一.基本算法:      (1)枚举. (poj1753,poj2965)      (2)贪心(poj1328,poj2109,poj2586)      (3)递归和分治法.      ( ...

  5. ACM入门指南[转]

    前言: 这篇指南不对ACM/ICPC国际大学生程序设计竞赛进行介绍,计算机学子如果不了解的可以在百度上进行搜索查询,这里介绍的只是一个计算机学生想要在ACM/ICPC里进行发展的初学者.内容比较简单通 ...

  6. ACM入门之【搜索】

    搜索在ACM中是很重要的. 搜索一般分为DFS和BFS两大类,下面又划分很多的小类. 入门习题: 842. 排列数字 843. n-皇后问题 844. 走迷宫 845. 八数码

  7. ACM入门之【读入、输出优化】

    本文主要是基于oiwiki的做的总结,未来也会做一系列的相关文章.如果想继续看的话可以关注专栏. 做这个专栏的目的是因为自己最近开始系统的再打一下基础.于是想写一个专栏便于喜爱ACM的初学者入门. 目 ...

  8. ACM入门及STL简介

    1.       ACM 国际大学生程序设计竞赛简介 1)       背景与历史 1970 年在美国TexasA&M 大学举办了首次区域竞赛,从而拉开了国际大学生程序设计竞赛的序幕.1977 ...

  9. 大牛对ACM入门菜鸟的一些话

    http://www.cnblogs.com/yefengCrazy/p/5636677.html 首先就是我为什么要写这么一篇日志.原因很简单,就是因为前几天有个想起步做ACM人很诚恳的问我该如何入 ...

最新文章

  1. AI一分钟 | 北京开放自动驾驶车辆路测道路105公里;阿里将人工智能引入时尚界...
  2. java隐藏控件_Android控件的显示和隐藏
  3. 机器学习(MACHINE LEARNING) 【周志华版-”西瓜书“-笔记】 DAY3-线性模型
  4. 又一道软通动力7K月薪面试题——银行业务调度系统
  5. Java SE 6 新特性: 编译器 API
  6. 从2021年多篇顶会论文看OOD泛化新理论、新方法和新讨论
  7. python众数问题给定含有n个元素的多重集合s_2-1 问题描述:给定含有n个元素的多重集合S - 下载 - 搜珍网...
  8. linux/windows中mysql、oracle、dm数据库连接
  9. 一条更新SQL 是如何执行的?
  10. 15行代码AC_ 【蓝桥杯】兴趣小组(解题报告+思考)
  11. AngularJS中关于ng-class和*ngIf指令
  12. linux 打zip gz tar,linux把文件压缩成.tar.gz的命令 | PT Ubuntu Blog
  13. Laravel核心解读--Database(三) 模型CRUD
  14. ios沙箱模式开启_【iOS】苹果IAP(内购)中沙盒账号使用注意事项
  15. 简单整蛊室友,只需几行bat病毒代码
  16. 数控机床的十大数控系统,学了这么多年终于全了!
  17. Python操作PDF的神器——PyMuPDF
  18. python sorted lambda_详解python中的lambda与sorted函数
  19. python程序员工资待遇-为什么企业很难招聘到好的python程序员?
  20. 林语堂:《醒觉·对人生的态度》

热门文章

  1. 板邓:php获取数组元素个数
  2. vue脚手架---vue-cli
  3. 内存泄露一个经典例子
  4. Android USB Gadget复合设备驱动(打印机)测试方法
  5. Android开发:什么是IBinder
  6. cmake (2)其他指令
  7. C++ Primer 5th笔记(chap 19 特殊工具与技术)type_info 类
  8. 《研磨设计模式》chap11 代理proxy模式
  9. java元婴期(24)----java进阶(mybatis(3)---动态sql(重点))
  10. Diffie-Hellman密钥交换协议