題目鏈結
[python] 兩次拓撲排序100%
雙重拓撲排序——python
:### 0115 (兩次)拓撲排序(220 ms,38 mb)
defsortitems
(self, n:
int, m:
int, group: list[
int]
, pres: list[list[
int]])
-> list[
int]
:# 拓撲排序 —— 基於bfs排序(佇列)
deftopsort
(items, indegrees, neighbours)
: q = collections.deque(
) res =
for item in items:
# 將所有入度為0的節點入隊
if indegrees[item]==0
# 若佇列非空,則迴圈
while q:
# 隊首元素出隊,並新增到訪問序列中
tmp = q.popleft(
)# 訪問當前節點的所有鄰居節點
for n in neighbours[tmp]
:# 所有鄰居節點入隊減一
indegrees[n]-=1
# 若某一鄰居節點入度為0,則將其入隊
if indegrees[n]==0
return res
#-------------------- 準備工作 --------------------#
# 初始化需要的資料結構
indegrees_ing = collections.defaultdict(
int)
# 組內的入度
indegrees_betg = collections.defaultdict(
int)
# 組間的入度
neighbours_ing = collections.defaultdict(
list
)# 組內節點的依賴關係
neighbours_betg = collections.defaultdict(
list
)# 組間的依賴關係
groups = collections.defaultdict(
list
)# 記錄各小組中的元素
res =
# 解決方案
# 遍歷每乙個專案n
for item in
range
(n):
# 若無人接手當前專案,則給此專案重新分配乙個組
if group[item]==-
1:group[item]
= m
m +=
1# 每個小組中的元素統計在一起(同乙個列表)
groups[group[item]
]# 記錄全部的小組數,其中每個無人接手專案單獨在乙個組
group_num = m
# 判斷邊的兩節點是否在同一組,分別更新 組間的 和 組內的 依賴關係和入度數
for item in
range
(n):
for pre in pres[item]
:# 若兩節點同組,則更新 組內的 節點依賴關係
if group[item]
== group[pre]
: indegrees_ing[item]+=1
neighbours_ing[pre]
# 若兩節點不同組,則更新 組間的 節點依賴關係
else
: indegrees_betg[group[item]]+=
1 neighbours_betg[group[pre]])
#-------------------- 排序工作 --------------------#
# 先執行組間排序,res_betg為組間排序返回值
res_betg = topsort(
[group for group in
range
(group_num)
], indegrees_betg, neighbours_betg)
# 若組間排序返回值長度與組數不等說明連組間的依賴都無法實現,則直接返回
iflen
(res_betg)
!= group_num:
return
# 再執行組內排序,按照排好的組間排序依次對每個小組進行組內排序
for i in res_betg:
tmp_res = topsort(groups[i]
, indegrees_ing, neighbours_ing)
# 執行組內排序
res += tmp_res
return res if
len(res)
== n else
# 若最終長度與item個數不等說明連組內依賴無法實現,則返回
1203 專案管理
1203.專案管理 公司共有n個專案和m個小組,每個專案要不無人接手,要不就由m個小組之一負責。group i 表示第i個專案所屬的小組,如果這個專案目前無人接手,那麼group i 就等於 1。專案和小組都是從零開始編號的 小組可能存在沒有接手任何專案的情況。請你幫忙按要求安排這些專案的進度,並返...
1203 專案管理
公司共有 n 個專案和 m 個小組,每個專案要不無人接手,要不就由 m 個小組之一負責。group i 表示第 i 個專案所屬的小組,如果這個專案目前無人接手,那麼 group i 就等於 1。專案和小組都是從零開始編號的 小組可能存在沒有接手任何專案的情況。請你幫忙按要求安排這些專案的進度,並返回...
Disconf 2 專案使用disconf管理配置
這一篇我們講解disconf在專案中的基本使用 在專案中使用disconf來管理配置檔案,需要下面的一些步驟 redis.host 10.211.55.6 redis.port 6379 效果如下 2.建立自己的專案,我這裡使用的是springboot,引入disconf相關的依賴 在resourc...