藍橋杯 最短路問題 嘗試三種方法

2021-09-10 13:25:09 字數 930 閱讀 2901

問題描述

給定乙個n個頂點,m條邊的有向圖(其中某些邊權可能為負,但保證沒有負環)。請你計算從1號點到其他點的最短路(頂點從1到n編號)。

輸入格式

第一行兩個整數n, m。

接下來的m行,每行有三個整數u, v, l,表示u到v有一條長度為l的邊。

輸出格式

共n-1行,第i行表示1號點到i+1號點的最短路。

樣例輸入

3 31 2 -1

2 3 -1

3 1 2

樣例輸出

-1-2

資料規模與約定

對於10%的資料,n = 2,m = 2。

對於30%的資料,n <= 5,m <= 10。

對於100%的資料,1 <= n <= 20000,1 <= m <= 200000,-10000 <= l <= 10000,保證從任意頂點都能到達其他所有頂點。

我使用的所有陣列都是動態開闢的,可以使用靜態陣列。

#include#include//int 最大值 int_max

#includevoid found();

void ini();

void interdata();

void shortestpath_dij();

void shortestpath_floyd();

void shortestpath_bel();

int n;

long m;

struct

map;

int main()

void found()

//if

}//if

}//for

}//while

for(v=1;v最後的最後,這三種方法均不能解決本題,正確率分別是30%,50%,70%。

錯誤原因都是超時,若改進請參考spfa演算法。

藍橋杯 交換瓶子(三種方法)

有n個瓶子,編號 1 n,放在架子上。比如有5個瓶子 2 1 3 5 4 要求每次拿起2個瓶子,交換它們的位置。經過若干次後,使得瓶子的序號為 1 2 3 4 5 對於這麼簡單的情況,顯然,至少需要交換2次就可以復位。如果瓶子更多呢?你可以通過程式設計來解決。輸入格式為兩行 第一行 乙個正整數n n...

最短路徑的三種實現方法

helpbuptguoan created by new life on 16 8 24.include include include include include include include using namespace std define n 5 圖的大小 const int typ...

三種最短路的總結

三種最短路演算法的對比 floyd dijkstra bellman ford 空間複雜度 o n 2 0 m 0 m 時間嗎複雜度 o n3 o m n logn o mn 適用情況 稠密圖稠密圖 稀疏圖負權邊 不可以不可以 可以floyd演算法簡單,dijkstra不能解決負權邊優化後可以得到m...