文章目錄
- 服務啟動
服務啟動
- 有若干連續編號的服務(編號從0開始),服務間有依賴關系,啟動一個指定的服務,請判斷該服務是否可以成功啟動,并輸出依賴的前置服務編號;
- 依賴關系是可以傳遞的,如2->1, 1->0, 則2依賴1和0;
輸入描述:
第一行輸入N,為服務的總個數,N在【1,5000】;
第二行輸入M, 為指定啟動的服務編號,M在【0, 5000);
接下來的N行為依賴關系,第一行為服務0的依賴,第二行為服務1的依賴,依次類推,格式:依賴服務個數,依賴編號,依賴編號…
輸出描述:
如果服務無法啟動(循環依賴)或者其他異常,輸出-1
若可以啟動,則按照編號從小到大順序輸出依賴的前置服務;若無依賴,則輸出null
示例1
輸入:
4
2
0
1,0
1,1
2,0,1
輸出:
0,1
示例2
輸入:
2
1
1,1
1,0
輸出:
-1
python實現
- DFS, 遞歸函數棧
# 輸入
n = int(input().strip())
specific_m = int(input().strip())
# 依賴關系
depend_dict = {}
for i in range(n):depend_dict[i] = list(map(int, input().strip().split(",")))# 依賴的列表
depend_list = []def dfs(m):global depend_dict, depend_list, specific_mcur_data = depend_dict.get(m)if cur_data[0] == 0: # 沒有依賴關系,可以啟動returnelse:for i in range(1, len(cur_data)):# 處理循環依賴if cur_data[i] == specific_m or cur_data[i] in depend_list:raise ValueError("循環依賴,無法啟動")# 存儲依賴depend_list.append(cur_data[i])# 遞歸調用dfs(cur_data[i])# 調用dfs
try:if n < 1 or n > 5000:raise ValueError("n 超出范圍")elif specific_m < 0 or n >= 5000:raise ValueError("m 超出范圍")dfs(specific_m)if depend_list: # 可以啟動,并有前置依賴服務depend_list.sort()print(",".join([str(i) for i in depend_list]))else:print("null")
except ValueError:print(-1)