bellman-ford算法 给定一个 n 个点 m 条边的有向图,图中可能存在重边和自环, 边权可能为负数. 请你求出从 1 号点到 n 号点的最多经过 k 条边的最短距离,如果无法从 1 号点走到 n 号点,输出 impossible. 注意:图中可能 存在负权回路 . 输入格式 第一行包含三个整数 n,m,k. 接下来 m 行,每行包含三个整数 x,y,z,表示存在一条从点 x 到点 y 的有向边,边长为 z. 输出格式 输出一个整数,表示从 1 号点到 n 号点的最多经过 k 条边的最短…
单源最短路 所有边权都是正数 朴素Dijkstra算法(稠密图) #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> using namespace std; const int N=510; int n,m; int g[N][N]; int dist[N]; bool st[N]; int dijkstra(){ memset(dist,0x3f,sizeof…
宽度优先搜索(BFS) #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #include<queue> #define x first #define y second using namespace std; typedef pair<int,int> PII; const int N=210; char g[N][N]; int d…
我们先看一下负权环为什么这么特殊:在一个图中,只要一个多边结构不是负权环,那么重复经过此结构时就会导致代价不断增大.在多边结构中唯有负权环会导致重复经过时代价不断减小,故在一些最短路径算法中可能会凭借不断重复经过负权环来得到权和为无穷小的最短路径,但因重复经过边不符合简单路径的定义导致这些算法跑最短路时要避免有负权环的出现. 这类算法说的就是Bellman-ford以及基于它进行优化的spfa了.由于负权环的出现导致这些算法的正确性失效.但这世上没有绝对的废物,我们也可以反过来利用这两种算法对负…
在Bellman-Ford算法之后,我们总算迎来了spfa算法,其实就如同堆优化Dijkstra算法之于朴素版Dijkstra算法,spfa算法仅仅是对Bellman-Ford算法的一种优化,但是在形式上,它看起来特别像堆优化Dijkstra算法罢了! Bellman-Ford算法会遍历所有边并进行松弛操作,然而我们应该知道很多的更新是无用的,所以我们的优化就体现在这里,因为只有那些前一步被更新的点,它所连接的点才有被更新的意义,所以我们会将被更新的点放入一个队列中: 注意点: 1) st数组的…
Problem Description 一个无环的有向图称为无环图(Directed Acyclic Graph),简称DAG图.     AOE(Activity On Edge)网:顾名思义,用边表示活动的网,当然它也是DAG.与AOV不同,活动都表示在了边上,如下图所示:                                           如上所示,共有11项活动(11条边),9个事件(9个顶点).整个工程只有一个开始点和一个完成点.即只有一个入度为零的点(源点)和只有一个…
1.图类基本组成 存储在邻接表中的基本项 /** * Represents an edge in the graph * */ class Edge implements Comparable<Edge> { public Vertex dest; //Second vertex in Edge public double cost; //Edge cost public Edge(Vertex d, double c) { dest = d; cost = c; } @Override pu…
描述: 对于图(有向无向都适用),求某一点到其他任一点的最短路径(不能有负权边). 操作: 1. 初始化: 一个节点大小的数组dist[n] 源点的距离初始化为0,与源点直接相连的初始化为其权重,其他为无穷大(INT32_MAX等). 标记源点,其到自身距离是0,已经是最小了. 2. 计算 对于dist,每次选取未标记的最小值(将其标记,表示已经得到最小值),更新与其相连的未标记的点: 如果此点加上权值,小于与其相连的点,则更新之. 代码: 代码并未优化,理解思路即可. #include <st…
Description While exploring his many farms, Farmer John has discovered a number of amazing wormholes. A wormhole is very peculiar because it is a one-way path that delivers you to its destination at a time that is BEFORE you entered the wormhole! Eac…
poj3259 题目大意:穿越虫洞可以回到过去(时间--)所以能不能让时间倒流呢,就是判断有没有负权回路这次尝试用SPFA算法,也可以复习一下链式前向星 准备工作,队列q,spfa算法得有点就在于这个队列,相对于bellman_ford算法来讲,spfa算法并不是盲目得去做松弛操作,而是对队列中的点进行松弛,只要队列不空就可以从队列中拿出点来做松弛,也就死只有先松弛了队列中得点(边松弛边添加)才能去松弛其余的更远得点! dis,vis经典数组 time数组时用来判断某个点松弛得次数得(进队列得次…