2011-06-06 30 views
4
網絡

我有一個頂點如dic = {'a': 0, 'b': 1, 'c': 2, 'd': 3, 'e': 4, 'f': 5, 'n':6, 'm':7, 'g':8}和我有兩列如下表示的頂點之間的關係:我想每個頂點在第一列與相應的頂點關聯代表在Python

a a 
b d 
e f 
c f 
n f 
m g 

在邊緣的第二列中。所以aa代表一個循環。 bd是好的。 e,cn他們共享相同的頂點f。而是說efcfnf我們可以說ecnf

+3

你的問題是......? – 2011-06-06 21:58:19

+2

如何:http://stackoverflow.com/questions/1171/what-is-the-most-efficient-graph-data-structure-in-python – 2011-06-06 22:02:00

+0

請注意,有多種方法來表示圖形,獨立的語言。 – Santa 2011-06-06 22:15:23

回答

4

請參見:https://www.python.org/doc/essays/graphs/

graph = { 
    'a' : [ 'a' ], 
    'b' : [ 'd' ], 
    'c' : [ 'f' ], 
    'd' : [], 
    'e' : [ 'f' ], 
    'f' : [], 
    'g' : [], 
    'm' : [ 'g' ], 
    'n' : [ 'f' ] 
} 

print [ vertex for vertex, edges in graph.items() if 'f' in edges ] 

編輯:

好吧,這聽起來像你只是想從你給出的投入建立圖的功能?

事情是這樣的:

def build_graph(vertices, edges): 
    graph = dict((v, list()) for v in vertices.keys()) 
    for a, b in edges: 
     graph[ a ].append(b) 
    return graph 

如果您需要幫助解析您的列數據爲二元組的列表,那麼這是一個不同的問題完全

+0

感謝您的回答,但在您的鏈接中,該功能確定了兩個節點之間的路徑。我的問題,我有超過40,000個節點,我想建立我的圖。 Verteices = {'a':0,'b':1,'c':2,'d':3,'e':4,'f':5,'n':6,'m':7 ,「G」:8,...最多到Z:40,000} AA BD EF CF NF 毫克 – graph 2011-06-07 08:47:51

0

到@ kurosch的回答一般選擇(鄰接表)被稱爲鄰接矩陣。它只是一個表示每個可能邊緣的矩陣,其中1表示存在邊緣,0表示不存在。

adj = [[0 for x in range(len(dic)] for x in range(len(dic))] 
adj[dic['a'][dic['b']] = 1 
etc.. 
+0

你是對的,但我用圖形的工具,所以我期待建立我的巨大功能圖形 – graph 2011-06-07 09:24:27