Python程式:查詢最大網路秩
假設有n個城市,一些道路連線這些城市。每個roads[i] = [u, v]表示城市u和v之間有一條雙向道路。現在考慮網路秩是直接連線到任一城市的道路總數。當一條道路直接連線到兩個城市時,只計算一次。整個網路的最大網路秩是所有不同城市對的最大網路秩。因此,如果我們有不同的道路,我們必須找到整個網路的最大網路秩。
因此,如果輸入如下所示:

則輸出將為5,因為有五種不同的方式連線城市1和2。
為了解決這個問題,我們將遵循以下步驟:
- n := 節點數
- s := 一個新的集合
- d := 一個對映,如果某個鍵不存在,則返回0。
- 對於roads中的每條邊(x,y),執行:
- d[x] := d[x] + 1
- d[y] := d[y] + 1
- 將(x,y)對插入d
- ans := 0
- l := 從0到n的一個新的列表
- 根據節點號以降序對l排序
- threshold := min(d[l[0]], d[l[1]])
- 對於範圍0到l的大小-1中的i,執行:
- 對於範圍i+1到l的大小-1中的j,執行:
- 如果d[l[j]] < threshold,則
- 退出迴圈
- curr := d[l[i]] + d[l[j]]
- 如果s中存在(l[i],l[j])或(l[j],l[i]),則
- curr := curr - 1
- ans := max(ans, curr)
- 如果d[l[j]] < threshold,則
- 對於範圍i+1到l的大小-1中的j,執行:
- 返回ans
示例
讓我們看看下面的實現,以便更好地理解:
from collections import defaultdict def solve(roads): nodes = set() s = set() d = defaultdict(int) for x,y in roads: nodes.update([x,y]) d[x]+=1 d[y]+=1 s.add((x,y)) ans = 0 n = len(nodes) l = list(range(n)) l.sort(key=lambda x:d[x], reverse = True) threshold = min(d[l[0]],d[l[1]]) for i in range(len(l)-1): for j in range(i+1,len(l)): if d[l[j]]<threshold: break curr = d[l[i]]+d[l[j]] if (l[i],l[j]) in s or (l[j],l[i]) in s: curr-=1 ans = max(ans,curr) return ans roads = [(0,1),(0,3),(1,2),(1,3),(2,3),(2,4)] print(solve(roads))
輸入
[(0,1),(0,3),(1,2),(1,3),(2,3),(2,4)]
輸出
5
廣告
資料結構
網路
關係資料庫管理系統 (RDBMS)
作業系統
Java
iOS
HTML
CSS
Android
Python
C語言程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP