問題描述
給定乙個n個頂點,m條邊的有向圖(其中某些邊權可能為負,但保證沒有負環)。請你計算從1號點到其他點的最短路(頂點從1到n編號)。
輸入格式
第一行兩個整數n, m。
接下來的m行,每行有三個整數u, v, l,表示u到v有一條長度為l的邊。
輸出格式
共n-1行,第i行表示1號點到i+1號點的最短路。
樣例輸入
3 3
1 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,保證從任意頂點都能到達其他所有頂點。
這裡由於他的權值有負數,所以要利用spfa這種演算法,這種演算法的要求是不能包含負權迴路;如何判斷時候包含負權迴路利用 拓撲排序 即可判斷, 下面是**:
/*這個是
*/#include #include #include #include #define inf 65535
using namespace std;
typedef struct _tag_node node;
struct _tag_node
};vectorvec; //用來儲存路徑的
int *head = null; //head是乙個陣列,head【i】 ,代表i作為起點指向其他點的輸入是第幾次
//在使用之前 已經在main函式中 申請了一塊記憶體供其使用
int *dis = null; //在使用之前 已經在main函式中 申請了一塊記憶體供其使用
int *vis = null; //用來判斷是否已經將該點加入到佇列中 如果是 那麼就是1; 出列後在置為0
//儲存這個路徑
void addroute(int s, int e, int v, int t)
int cmp(int s, int e, int v)
// else
return 0;
}void spfa(int s)
} }}int main()
for(int i=0; i
演算法訓練 最短路
最近在學習一些常見的演算法,演算法這東西不練是不行的,所以學習的同時也找了些題來練。我找的題目 於 vjudge 上的 kuangbin帶你飛專題訓練。每做完乙個專題,我都會寫一篇部落格整理一下這個專題。現在這個專題是,圖論中的最短路。最短路相關的演算法有很多,在專題訓練中會用到的有 dijkstr...
演算法訓練 最短路
問題描述 給定乙個n個頂點,m條邊的有向圖 其中某些邊權可能為負,但保證沒有負環 請你計算從1號點到其他點的最短路 頂點從1到n編號 輸入格式 第一行兩個整數n,m。接下來的m行,每行有三個整數u,v,l,表示u到v有一條長度為l的邊。輸出格式 共n 1行,第i行表示1號點到i 1號點的最短路。樣例...
演算法訓練 最短路
演算法訓練 最短路 時間限制 1.0s 記憶體限制 256.0mb 問題描述 給定乙個n個頂點,m條邊的有向圖 其中某些邊權可能為負,但保證沒有負環 請你計算從1號點到其他點的最短路 頂點從1到n編號 輸入格式 第一行兩個整數n,m。接下來的m行,每行有三個整數u,v,l,表示u到v有一條長度為l的...