所以我试图通过一本用来教授不同类型的模型和算法的书来解决这个问题。我的代码如下。本质上,它生成图形的文本输出。各个点被称为“顶点”,连接它们的线是“边缘”。我目前要做的是检查两个顶点之间是否存在边缘。
class Graph(dict):
def __init__(self, vs=[], es=[]):
for v in vs:
self.add_vertex(v)
for e in es:
self.add_edge(e)
def add_vertex(self, v):
self[v] = {}
def add_edge(self, e):
v,w = e
self[v][w] = e
self[w][v] = e
def get_edge(self, v, w):
g = dict(self)
keys = g.keys()
return type(keys[0])
def remove_edge(self, e):
pass
def vertices(self):
keys = self.keys()
return keys
class Vertex(object):
def __init__(self, label=''):
self.label = label
def __repr__(self):
return 'Vertex(%s)' % repr(self.label)
__str__ = __repr__
class Edge(tuple):
def __new__(cls, e1, e2):
return tuple.__new__(cls, (e1, e2))
def __repr__(self):
return 'Edge(%s, %s)' % (repr(self[0]), repr(self[1]))
__str__ = __repr__
v = Vertex('v')
w = Vertex('w')
e = Edge(v, w)
print e
g = Graph([v,w],[e])
print g
edge = Graph.get_edge(g, 'v', 'w')
print edge
问题在于:
def get_edge(self, v, w):
g = dict(self)
keys = g.keys()
return type(keys[0])
我无法访问字典中的值,因为我无法使用键,返回类型行显示原因:
输出:
Edge(Vertex('v'), Vertex('w'))
{Vertex('v'): {Vertex('w'): Edge(Vertex('v'), Vertex('w'))}, Vertex('w'):{Vertex('v'): Edge(Vertex('v'), Vertex('w'))}}
<class '__main__.Vertex'>
问题是键不是字符串,整数,或者我可以引用的任何东西,它们是通过调用Vertex类生成的。有什么方法可以引用我错过的键吗?我的目标是让方法返回请求的边缘(如果存在)。