[英]Sorting nodes of a undirected graph based on value in Python
我對Python比較陌生。 我用Python(3.x)編寫了此代碼,以解決涉及無向圖的問題。
程序的預期輸出應從相鄰節點的降序排序(基於節點的值)開始,打印出現在相鄰節點列表中第k位的節點,但是如果兩個值相同,則出現的節點首先按其索引的升序打印。
如果不存在這樣的節點,則打印-1 。
n, m, k = input().strip().split(' ')
n, m, k = [int(n), int(m), int(k)]
node_values = list(map(int, input().split(' ')))
d = {}
for i in range(n+1):
d[i] = []
for i in range(m):
x, y = input().strip().split(' ')
x, y = [int(x), int(y)]
d[x].append(y)
d[y].append(x)
for key, value in d.items():
if key != 0:
if k <= len(value):
new_list = sorted(value, key=lambda x: node_values[x-1], reverse=True)
print(new_list[k-1])
else:
print(-1)
在這里,我使用sort()
進行sort()
,將鍵作為來自node_values
的值提供。 但是我對添加第二個條件感到困惑(如果值相同,則根據其索引的升序對其進行排序)。
我在這里做錯了什么? 在使用字典的情況下,使用並行列表來表示圖形還是更好的選擇?
用於排序的lambda函數可以返回一個元組,在您的情況下,該元組將形成為節點值和節點的索引。
sorted(value, key=lambda x: (node_values[x-1], x), reverse=True)
但是您想要一個不同的順序:節點值降序,索引值升序。 這可以通過按降序排序索引的負值來實現: x<y => -y < -x
。 因此,您可以使用以下lamba函數:
sorted(value, key=lambda x: (node_values[x-1], -x), reverse=True)
我假設“ x”是您節點的索引,但是對我來說這並不是很清楚。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.