您好,我了解邻接表和矩阵的概念,但我对如何在 Python 中实现它们感到困惑:

实现以下两个示例的算法实现了但不知道从一开始的输入,因为他们在示例中对其进行了硬编码:

对于邻接列表:

    a, b, c, d, e, f, g, h = range(8)
    N = [
     {b:2, c:1, d:3, e:9, f:4},    # a
     {c:4, e:3},                   # b
     {d:8},                        # c
     {e:7},                        # d
     {f:5},                        # e
     {c:2, g:2, h:2},              # f
     {f:1, h:6},                   # g
     {f:9, g:8}                    # h
   ]

对于邻接矩阵:
    a, b, c, d, e, f, g, h = range(8)
    _ = float('inf')
    #     a b c d e f g h
    W = [[0,2,1,3,9,4,_,_], # a
        [_,0,4,_,3,_,_,_], # b
        [_,_,0,8,_,_,_,_], # c
        [_,_,_,0,7,_,_,_], # d
        [_,_,_,_,0,5,_,_], # e
        [_,_,2,_,_,0,2,2], # f
        [_,_,_,_,_,1,0,6], # g
        [_,_,_,_,_,9,8,0]] # h

再次任何帮助将不胜感激,谢谢!

最佳答案

假设:

edges = [('a', 'b'), ('a', 'b'), ('a', 'c')]

这是矩阵的一些代码:
from collections import defaultdict

matrix = defaultdict(int)
for edge in edges:
    matrix[edge] += 1

print matrix['a', 'b']
2

而对于“列表”:
from collections import defaultdict

adj_list = defaultdict(lambda: defaultdict(lambda: 0))
for start, end in edges:
    adj_list[start][end] += 1

print adj_list['a']
{'c': 1, 'b': 2}

关于python - Python中的邻接表和邻接矩阵,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13547133/

10-12 16:41