題意:求圖當中從0號節點到n-1號節點的次短路。
思路:在spfa演算法上稍改進即可,更新次短路的情況分三種。1、當最短路更新時將次短路的值更新為當前最短路的值(這樣保證次短路永遠都是大於最短路且是第二小的)。2、次短路正常更新。3、當最短路不更新時,若到u的最短路經過該邊到v的距離小於次短路則更新次短路。
**:
#includeusing namespace std;
typedef long long ll;
const int maxn=5050;
int n,m,vis[maxn],dist[maxn],dist2[maxn]; //dist記錄最短路,dist2記錄次短路
vector> e[maxn]; //鄰接表建圖
void spfa(int x)
if(dist2[v]>dist2[u]+step)
if(dist2[v]>dist[u]+step&&dist[v]>n>>m;
for(int i=0;i>x>>y>>z;
e[x].push_back(make_pair(y,z));
e[y].push_back(make_pair(x,z));
} spfa(0);
cout
}
最短路 SPFA演算法
spfa 是bellman ford的佇列優化,時效性相對好,時間複雜度o ke 與bellman ford演算法類似,spfa演算法採用一系列的鬆弛操作以得到從某乙個節點出發到達圖中其它所有節點的最短路徑。所不同的是,spfa演算法通過維護乙個佇列,使得乙個節點的當前最短路徑被更新之後沒有必要立刻...
最短路演算法 SPFA
單源最短路徑,不可以處理含負權邊的圖但可以用來判斷是否存在負權迴路 複雜度o ke k 2,e 為邊數 bellman ford 演算法的優化,實質與前演算法一樣,但優化的關鍵之處在於 只有那些前面被鬆弛過的點才有可能去鬆弛它們的鄰接點。include include include include...
最短路 spfa演算法
板子補完計畫絕讚繼續中 這篇部落格就來寫一寫spfa 這我居然板子都打錯了一次,我太弱啦!先來看一下定義 引自 首先說明,spfa是一種單源最短路徑演算法,所以以下所說的 某點的最短路徑長度 指的是 某點到源點的最短路徑長度 我們記源點為s,由源點到達點i的 當前最短路徑 為d i 開始時將所有d ...