簡體   English   中英

根據Python中的值對無向圖的節點進行排序

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM