图形实现问题是Python



这是我的 Node 类,

class Node:
def __init__(self, id, value):
self.id = id
self.value = value
self.neighbors = set()
def add_edge(self, node):
self.neighbors.add(node)
def get_adjacent_vertices(self):
return sorted(list(self.neighbors))
def __eq__(self, other):
return self.id == other.id
def __lt__(self, other):
return self.id < other.id
def __gt__(self, other):
return self.id > other.id
def __ge__(self, other):
return self.id >= other.id
def __le__(self, other):
return self.id <= other.id

这是图形对象,

class Graph:
def __init__(self, directed=False):
self.vertices = 0
self.directed = directed
self.vertex_map = {}
def add_edge(self, v1, v2, weight=1):
if v1 in self.vertex_map:
V1 = self.vertex_map[v1]
else:
self.vertices += 1
V1 = Node(self.vertices, v1)
self.vertex_map[v1] = V1
if v2 in self.vertex_map:
V2 = self.vertex_map[v2]
else:
self.vertices += 1
V2 = Node(self.vertices, v2)
self.vertex_map[v2] = V2
if V1 != V2:
V1.add_edge(V2)
if not self.directed:
V2.add_edge(V1)
else:
raise GraphError("Cannot add node to itself!")

这是我的调用代码,

if __name__ == '__main__':
graph = Graph(directed=True)
graph.add_edge('A', 'B')
graph.add_edge('A', 'C')
graph.add_edge('B', 'D')
graph.add_edge('D', 'E')
print(graph)

这将引发以下错误,

TypeError: unhashable type: 'Node'

我可以通过将邻居更改为列表来解决此问题,但我的问题是,由于我已经为 Node 定义了哈希逻辑,我如何继续使用集合来存储它的邻居。

好吧,我认为您可以为每个元素使用 id,这对每个元素都是唯一的。除了设置之外,您还可以使用默认字典,该dict将用于存储顶点的所有相邻元素。

从集合导入默认字典 adjacent_node_list = defaultdict(lambda:[](

def add_edge(self,u,v):
if v not in d[u]:
d[u].append(v)

如果图形是无向的,那么你也必须将你添加到d[v] 有关更多输入,请指定您实际尝试执行的操作

相关内容

最新更新