最短路演算法整理 奇奇怪怪的總結

2022-09-14 20:21:27 字數 792 閱讀 3137

先講講樸素的dijkstra演算法的思路.樸素的dijkstra演算法先將起點入隊.然後找到乙個起點距離最近的點.再用這個點去更新其他所有的點.一共有多少個點就進行多少次迭代.因為每次找到乙個用於更新距離的點.它的最短距離就已經確定了.

#include #include using namespace std;

#define inf 0x3f3f3f

const int n = 510;

int n,m,g[n][n],st[n],dist[n];

void dijkstra()

); while(q.size())}}

if(dist[n]==0x3f3f3f3f) printf("impossible\n");

else printf("%d\n",dist[n]);

}

因為st陣列的值在反覆變化,並且佇列也不是按距離進行排序.所以每個點都有多次入隊的機會.如果用陣列實現佇列需要用迴圈佇列.

時間複雜度o(m)m指邊的數量.

因為佇列可以多次入隊同一點.所以spfa演算法可以用來處理負邊權和判負環.

cnt陣列表示入隊次數,也就是有多少邊能到此點.如果cnt[t]>n 說明出現了環.

bool spfa(int n)

while(q.size())//如果存在負環,到路徑上最後乙個點->初始點d<=0,所以可以繼續更新.}}

return false;

}

奇奇怪怪的樹形dp

條件 1.整個圖是乙個樹狀的結構或者可以轉化為樹狀的結構。2.對於每個根節點的狀態,跟且僅跟所屬的孩子 大多為2個 有牽連關係。也就是說,父親對孩子沒有影響。3.狀態可以簡單的表示 4.有重疊子問題 可以沒有,不過那樣應用dp就沒有意義了 將樹轉換為二叉樹 樹中每個結點最多只有乙個最左邊的孩子 長子...

那些奇奇怪怪的寫法

template class t class test template class t void func t a,int len 關鍵字template意味著我們要定義乙個模板,那定義模板肯定要有泛指型別,那麼泛指型別在 呢,t就是我們要的泛指型別,那為什麼t前面是關鍵字class而不是關鍵字t...

奇奇怪怪的知識 GMV

gmv gmv gross merchandise volume 在電商 定義裡面是 成交金額,這個實際指的是拍下訂單金額,包含付款和未付款的部分 gmv 1銷售額 2取消訂單金額 3拒收訂單金額 4退貨訂單金額 一般取消訂單與拒收訂單的分界點在訂單是否已經從庫房生產完畢,庫房還沒生產的訂單客戶取消...