藍橋杯 Python演算法 演算法訓練 最短路

2021-10-05 17:28:40 字數 1472 閱讀 3897

問題描述

給定乙個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

最短路詳細思路

因為可能有負權,又是求單源最短路徑。所以我們使用簡單的spfa演算法。

import queue

defspfa()

: q = queue.queue(

) q.put(1)

#開始結點1號入隊

in_queue[1]

=1#標誌其在佇列中

dis[1]

=0while

not q.empty():

u = q.get(

)#彈出隊首結點

in_queue[u]=0

for v in map_d[u]

:#遍歷u的所有鄰接邊u->v

dis_v = map_d[u]

[v]if dis[v]

>

(dis[u]

+dis_v)

: dis[v]

= dis[u]

+dis_v

if(in_queue[v]==0

):#如果v不在佇列中,將v加入佇列

in_queue[v]=1

q.put(v)

if __name__==

"__main__"

: n,m =

map(

int,

input()

.split())

map_d =

dis =

[float

('inf'

)for i in

range

(n+1)]

in_queue =[0

for i in

range

(n+1)]

#判斷是否結點在佇列中

for i in

range

(m):

u,v,l =

map(

int,

input()

.split())

map_d.setdefault(u,

)[v]

= l #使用值為字典的字典存放u->v邊和其的權值l

spfa(

)for i in

range(2

,n+1):

print

(dis[i]

)

藍橋杯 演算法訓練 Lift and Throw

演算法訓練 lift and throw 時間限制 3.0s 記憶體限制 256.0mb 問題描述 給定一條標有整點 1,2,3,的射線.定義兩個點之間的距離為其下標之差的絕對值.laharl,etna,flonne一開始在這條射線上不同的三個點,他們希望其中某個人能夠到達下標最大的點.每個角色只能...

藍橋杯 演算法訓練 數列

題目 演算法訓練 數列 時間限制 1.0s 記憶體限制 256.0mb 問題描述 給定乙個正整數k 3 k 15 把所有k的方冪及所有有限個互不相等的k的方冪之和構成乙個遞增的序列,例如,當k 3時,這個序列是 1,3,4,9,10,12,13,該序列實際上就是 3 0,31,3 0 31,3 2,...

藍橋杯 演算法訓練 Glenbow Museum

資料規模和約定 按題目描述所示。問題描述 卡城著名的格林堡博物館是加拿大西部最大的博物館,展品涵蓋了藝術 文化史以及礦物學。如今乙個全新的展區正在被布置,它是專門為你這樣傑出的程式猿 媛 打造的。不幸的是,由於空間不足,博物館打算建造一棟新的建築來重新安置這個展區。新的建築的尺寸和容量將不同於原始的...