人山人海(python實現)

2021-10-16 17:58:48 字數 4828 閱讀 3146

小朱和小白同學來到大學旁的商圈鳳巢玩耍。商圈中有n個娛樂場館和m條路連線這些場館。由於國慶期間出門玩耍的人數增加,每條路上都積攢了不同數量的遊客。小朱同學不想經過遊客太多的路徑,所以求助成都某大學精通圖演算法的小白同學。問,任意兩個場館之間最大遊客數量最小的那條路的最大遊客數量。

如圖:a-g兩點間的路徑,只有a-c-f-d-g這條路的最大遊客數量是最小的,為80。

b-d兩點間的路徑,只有b-a-c-f-d這條路的最大遊客數量是最小的,為80。

輸入:第一行m<10000為圖的邊數,第二行為圖的點數。之後m<100行,每行有三個正整數i,j,k表示節點i,j相連,遊客人數k<10000。之後一行乙個正整數t樣例:

輸入:5

41 2 10

1 3 20

2 3 15

2 4 5

3 4 30104

輸出:10

這個題目的思路和溫差問題有些相似,先將圖中所有的邊按權重從小到大排列,從排列好的邊集合a依次取出邊加入乙個新的集合b,每加入一條邊都要判斷給定的起點終點在集合b中的邊與邊對應的點構成的圖里是否可達,如果可達就停止加邊,將集合b中最大的邊權值輸出。

import sys, time, math

edgelinks =

dict()

edgelinks_dfs =

dict()

stack =

edgeweightsabout =

dict()

edgeweightsabout1 =

dict()

edgeweight =

dict()

cu =

j =[

]s =

path =

start =

end =

stack =

t =[

]q =

ju =

0start_1 = time.time(

)def

dfs(start, end)

:global stack, t, edgelinks_dfs, p, ju

if start == end:

p =1 ju =

1# print("找到路徑:%s" %(stack))

stack.clear(

)else:if

len(edgelinks_dfs)!=0

:if start in edgelinks_dfs:

for nextpoint in edgelinks_dfs[start]

:# start不為全域性變數 在遞迴後就變為了nextpoint

if nextpoint not

in stack:

dfs(nextpoint, end)

if p ==1:

stack.clear(

)return

else

: p =-1

stack.pop(

)global p

p =0

f =open

('data5.txt'

,'r'

)p =

int(f.readline())

v =int

(f.readline())

if v >

1and v <=

10000

and p <=

10000

:for item2 in

range

(p):

a, b, c =

map(

int, f.readline(

).split())

wi =

int(c)

ifstr

(a)not

in edgelinks: edgelinks[

str(a)]=

set()if

str(b)

notin edgelinks: edgelinks[

str(b)]=

set(

) edgelinks[

str(a)

].add(

str(b)

) edgelinks[

str(b)

].add(

str(a)

)# 進行權重分類 權重一樣的放到乙個集合裡面

if wi not

in edgeweightsabout.keys():

edgeweightsabout[wi]=[

]ifnotin edgeweightsabout[wi]

: edgeweightsabout[wi])if

str(a)

notin edgeweight:

edgeweight[

str(a)]=

dict()

ifstr

(b)not

in edgeweight:

edgeweight[

str(b)]=

dict()

edgeweight[

str(a)

].update(

) edgeweight[

str(b)

].update(

) np =

int(f.readline())

for item3 in

range

(np)

: m, n =

map(

int, f.readline(

).split())

str(m)

)str

(n))

s =sorted

(edgeweightsabout.keys(

), reverse=

false

)for item6 in

range

(len

(s))

: edgeweightsabout1.update(

)for item12 in

range

(np)

: t.clear(

) cu.clear(

) j.clear(

) edgelinks_dfs.clear(

) stack.clear(

) ju =

0for item7 in

range

(len

(s)):if

(ju==1)

:break

for item8 in

range

(len

(edgeweightsabout1[s[item7]])

):if(ju==1)

:break

for item11 in edgeweightsabout1[s[item7]

][item8]

:if j[0]

notin edgelinks_dfs: edgelinks_dfs[j[0]

]=set(

)if j[1]

notin edgelinks_dfs: edgelinks_dfs[j[1]

]=set(

) edgelinks_dfs[j[0]

].add(j[1]

) edgelinks_dfs[j[1]

].add(j[0]

)str

(j[0])

)str

(j[1])

) j.clear()if

(len

(edgelinks_dfs)==0

):break

else:if

(len

(edgelinks_dfs)==0

):break

else

:if start[item12]

in cu and end[item12]

in cu:

dfs(start[item12]

, end[item12])if

(p ==1)

:len

(cu)-2

]][cu[

len(cu)-1

]])if

(ju ==1)

:print

('%s->%s'

%(start[item12]

,end[item12]

),end=

' '

)print

(t)else

:print

('no path'

)end_1 = time.time(

)print

('running time: %s seconds'

%(end_1 - start_1)

)

該**採取讀取檔案形式,只需將檔案路徑放入即可。

輸出:為起點->終點 最大遊客數量

輸出為「no path」意味著沒有該路徑

正常輸出如下:

1->10 [10]

1->13 [10]

2->25 [13]

45->70 [11]

8->89 [8]

running time: 0.009997129440307617 seconds

躲過了人山人海,沒躲過IDC人的朋友圈

只要你的朋友圈有一位idc銷售 你就能不出門看盡萬里風景 他們大概是中國地理學得最好的一群人 因為長期在外奔波 他們能告訴你 網路好 哪個城市好玩 哪個地方好吃 他們也是一群風趣幽默的人 隱藏段子手 乙個個表情包在他們的設計下 心酸又搞笑 他們還是一群充滿正能量的人 不管是大小節日 還是乙個普通的清...

python實現線性回歸 python實現線性回歸

參考 機器學習實戰 machine learning in action 一 必備的包 一般而言,這幾個包是比較常見的 matplotlib,用於繪圖 numpy,陣列處理庫 pandas,強大的資料分析庫 sklearn,用於線性回歸的庫 scipy,提供很多有用的科學函式 我一般是用pip安裝,...

python爬蟲基礎實現 Python實現基礎爬蟲

初次使用urllib實現爬蟲的資料請求 urllib.request.urlopen url 發起get請求 urllib.parse.quote 將中文進行url編碼 from urllib.request importurlopen,urlretrieve,requestfrom urllib....