首页 > 解决方案 > Python:使用一组邻接列表构建图

问题描述

你好,这是我的第一篇文章,我的英语不流利,如果我做错了发帖协议,请原谅我......

所以,我通过邻接矩阵有一个图的当前实现:

class GFG: 
def __init__(self,graph): 
    self.graph = graph

我从这里开始:

my_shape = (N,M)
bpGraph = np.zeros(my_shape)

并添加这样的边缘:

vertex_a = 2
vertex_b = 5
bpGraph [vertex_a, vertex_b] = 1
g = GFG(bpGraph)

并检查这样的边缘:

if bpGraph [vertice_a, vertice_b]:
do something...

但是这种结构如果我有很多顶点的话会占用很多空间,所以我想切换到一个set map

class GFG: 
def __init__(self,N,M):
    mysetdict = {
        "dummy_a": {"dummy_b","dummy_c"},
    }
    self.graph = mysetdict 

def add_edges(self,N,M):
    N_set = {}
    if str(N) in self.graph:
        N_set = self.graph[str(N)]
    N_set.add(str(M))

    self.graph[str(N)] = N_set

def check_edges(self,N,M):
     return str(M) in self.graph[str(N)]

当我尝试添加顶点时,出现此错误:

g = GFG (3,4)
g.add_edges (0, 0)
AttributeError: 'dict' object has no attribute 'add'
---> 16                 N_set.add(str(M))

我尝试了很多方法来构建这个集合,并在添加 vertex_a 以使用 vertex_b 做边之前检查是否存在条目,但我所有的尝试都会导致属性错误。

有什么建议么?

标签: python-3.xdictionarygraphset

解决方案


解决了,只做 N_set = set()

def add_edges(self,N,M):
    N_set = set()
    if str(N) in self.m_graph:
        N_set = self.m_graph[str(N)]
    N_set.add(str(M))

    self.m_graph[str(N)] = N_set

推荐阅读