0

您好,我有以下代码为图形执行邻接列表,它可以很好地打印代码,除了向 va 和 vb 添加新值时,旧键会被覆盖。如果我发现顶点 0 与 1 和 2 相邻,我想同时添加,但是 1 被 2 覆盖。另外我尝试使用其他插入方法,我得到错误 0,这是字典中没有键该指数:

def caminhografo(grafo, va, vb):
    vat = vertex
    i = 0
    a = 0
    z = 0
    va = int(va)
    vb = int(vb)
    x = len(grafo.node)
    if va < vb:
        for va in range (vb+1):
            a = 0
            x = len(grafo.node)
            for a in range (x):
                if [int(va),int(a)] in grafo.node:
                    vat.adj[va] = a

    if va > vb:
        while vb > va:
            a = 0
            x = len(grafo.node)
            for a in range (x):
                if[int(vb),int(a)] in grafo.node:
                    vat.adj[vb] = a
            vb = vb - 1
    print (vat.adj)

我怎样才能正确地动态插入键?

这是 Vertex,grafo 是一个图类:

class graph:
  v = 0
  a = 0
  node = []

class vertex:
  adj = {}

谢谢你的帮助。

4

2 回答 2

0

您可以将每个值声明vat.adj为列表vat.adj[i] = [],然后执行 vat.adj[vb].append(a)

请注意,您需要将每个项目初始化vat.adj为所有顶点的列表。

for i in range(n):
    vat.adj[i] = []
于 2013-10-12T23:36:09.563 回答
0

使用 defaultdict 完成了这项工作。

from collections import defaultdict

然后,我没有使用类顶点,而是简单地创建了一个 defaultdict(list):

vat = defaultdict(list)

之后,使用 append 就可以了:

增值税[va].append(a)

似乎用蛮力创建列表的字典不起作用,因为附加不会发生。但是使用导入列表的默认字典解决了这个问题。

于 2013-10-13T01:07:20.670 回答