![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
最短路
策马奔腾向前冲
这个作者很懒,什么都没留下…
展开
-
最短路问题的套路模板
Dijkstra算法基于贪心,Bellman算法基于离散数学,spfa算法是Bellman的优化版,Floyd算法基于动态规划原创 2019-08-16 10:26:37 · 151 阅读 · 0 评论 -
朴素Dijkstra算法
memset(v,0,sizeof(v));for(int i=0;i<n;i++) d[i]=(i==0?0:INF);for(int i=0;i<n;i++){ int x,m=INF; for(int y=0;y<n;y++){ if(!v[y]&&d[y]<=m) m=d[x=y];...原创 2019-08-17 11:45:21 · 167 阅读 · 0 评论 -
堆优化版的Dijkstra
堆优化版的Dijkstra使用邻接表存储图。每个节点i都有一个链表,里面保存着从i出发的所有边。首先给每条边编号,然后用first[u]保存结点u的第一条边的编号,next[e]表示编号为e的边的“下一条边”的编号。下面的函数读入有向图的边列表,并建立邻接表:int n,m;int first[maxn];int u[maxn],v[maxn],w[maxn],next[maxn];...原创 2019-08-16 12:51:16 · 1418 阅读 · 0 评论 -
Bellman-Ford算法
Bellman-Ford算法大致可以分成三部分:1.初始化所有d[s],源点d[s]=0,其他d[s]=INF2.进行n-1次循环,在循环体中遍历所有的边,进行松弛计算(if(d[v]>d[u]+w[u][v]) d[v]=d[u]+w[u][v])3.遍历图中所有的边,检验是否出现这种情况:d[v]>d[u]+w[u][v],若出现则返回false,没有最短路Bel...原创 2019-02-28 14:33:37 · 13949 阅读 · 6 评论 -
SPFA算法
判断图中是否有负环可用spfa算法,比Bellman-Ford算法效率高。d[v]=min(d[v],d[u]+w),只有d[u]变小,d[v]才变小,spfa基于这一点进行优化。 只要d[u]变小,则将其压入队列中,并更新以u为起点的所有路径。bool bellman_ford(){ queue<int>Q; memset(inq,0,sizeof(inq)...原创 2019-08-17 00:06:02 · 171 阅读 · 0 评论 -
Floyd算法
Floyd算法可以处理具有负权的图,但不能有负环。初始化:for(int i=0;i<n;i++){ for(int j=0;j<n;j++){ if(i==j) d[i][j]=0; else d[i][j]=INF; }}算法结束后,d[a][b]表示a到b的最短距离void floyd(){ for(i...原创 2019-08-17 00:43:40 · 439 阅读 · 0 评论 -
bfs解决最短路问题
宽度优先搜索按照开始状态由远及近的顺序进行搜索,因此很容易地用来求最短路径、最少操作之类问题的答案。7-6 迷宫寻路给定一个M行N列的迷宫图,其中 "0"表示可通路,"1"表示障碍物,无法通行。在迷宫中只允许在水平或上下四个方向的通路上行走,走过的位置不能重复走。5行8列的迷宫如下:0 1 1 1 0 0 0 00 0 0 1 0 0 0 00 1 0 0 0 1 0 00...原创 2019-09-27 00:38:30 · 566 阅读 · 0 评论 -
非常规法求解单源最短路
2019百度之星程序设计竞赛-初赛三-最短路 1Time Limit: 2000/1000 MS (Java/Others)Memory Limit: 32768/32768 K (Java/Others)Problem Description有一张n个点的完全无向图,点的标号是1...n,其中边(i,j)的长度是ixorj,现在你需要求出点1到点n的最短...原创 2019-08-24 16:44:54 · 77 阅读 · 0 评论