小朱和小白同學來到大學旁的商圈鳳巢玩耍。商圈中有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....