图论圣人,KeyError
Sage for Graph Theory, KeyError
我将从我的代码开始,因为对于那些对语言有更好理解的人来说,这可能只是一个明显的问题:
g = graphs.CompleteGraph(60).complement()
for i in range(1,180):
a = randint(0,59)
b = randint(0,59)
h = copy(g)
h.add_edge(a,b)
if h.is_circular_planar():
g.add_edge(a,b)
strong = copy(strong_resolve(g))
S = strong.vertex_cover()
d = {'#00FF00': [], '#FF0000': []}
for v in G.vertices():
if v in S:
d['#FF0000'].append(v)
else:
d['#00FF00'].append(v)
g.plot(layout="spring", vertex_colors=d).show()
strong.plot(vertex_colors=d).show()
new_strong = copy(strong)
for w in new_strong.vertices():
if len(new_strong.neighbors(w)) == 0: #trying to remove
new_strong.delete_vertex(w) #disconnected vertices
new_strong.plot(vertex_colors=d).show()
一些注意事项:strong_resolve 是一个函数,它接收一个图形并输出另一个图形。前两段代码工作正常。
我的问题是,一旦我添加了第三个块,事情就不再起作用了。在四处摆弄时,我得到了这段代码的变体,这些变体在添加时会导致错误,而在删除时错误仍然存在。现在发生的是 for 循环似乎一直持续到结束,然后才会给出以下错误:
Traceback (most recent call last): if h.is_circular_planar():
File "", line 1, in <module>
File "/tmp/tmprzreop/___code___.py", line 30, in <module>
exec compile(u'new_strong.plot(vertex_colors=d).show()
File "", line 1, in <module>
File "/usr/lib/sagemath/local/lib/python2.7/site-packages/sage/misc/decorators.py", line 550, in wrapper
return func(*args, **options)
File "/usr/lib/sagemath/local/lib/python2.7/site-packages/sage/graphs/generic_graph.py", line 15706, in plot
return self.graphplot(**options).plot()
File "/usr/lib/sagemath/local/lib/python2.7/site-packages/sage/graphs/generic_graph.py", line 15407, in graphplot
return GraphPlot(graph=self, options=options)
File "/usr/lib/sagemath/local/lib/python2.7/site-packages/sage/graphs/graph_plot.py", line 247, in __init__
self.set_vertices()
File "/usr/lib/sagemath/local/lib/python2.7/site-packages/sage/graphs/graph_plot.py", line 399, in set_vertices
pos += [self._pos[j] for j in vertex_colors[i]]
KeyError: 0
这可能会有所不同,因为 KeyError: 0 有时是 1 或 2,具体取决于一些未知因素。
我提前为我糟糕的代码道歉,并承认我真的不知道自己在做什么,但如果有人能帮助我,我将不胜感激。
我想通了!事实证明错误来自 d 的条目在 new_strong 中没有意义,即那些已经删除的顶点。当 plot() 尝试根据 d.
为顶点着色时,这导致了关键错误
我将从我的代码开始,因为对于那些对语言有更好理解的人来说,这可能只是一个明显的问题:
g = graphs.CompleteGraph(60).complement()
for i in range(1,180):
a = randint(0,59)
b = randint(0,59)
h = copy(g)
h.add_edge(a,b)
if h.is_circular_planar():
g.add_edge(a,b)
strong = copy(strong_resolve(g))
S = strong.vertex_cover()
d = {'#00FF00': [], '#FF0000': []}
for v in G.vertices():
if v in S:
d['#FF0000'].append(v)
else:
d['#00FF00'].append(v)
g.plot(layout="spring", vertex_colors=d).show()
strong.plot(vertex_colors=d).show()
new_strong = copy(strong)
for w in new_strong.vertices():
if len(new_strong.neighbors(w)) == 0: #trying to remove
new_strong.delete_vertex(w) #disconnected vertices
new_strong.plot(vertex_colors=d).show()
一些注意事项:strong_resolve 是一个函数,它接收一个图形并输出另一个图形。前两段代码工作正常。
我的问题是,一旦我添加了第三个块,事情就不再起作用了。在四处摆弄时,我得到了这段代码的变体,这些变体在添加时会导致错误,而在删除时错误仍然存在。现在发生的是 for 循环似乎一直持续到结束,然后才会给出以下错误:
Traceback (most recent call last): if h.is_circular_planar():
File "", line 1, in <module>
File "/tmp/tmprzreop/___code___.py", line 30, in <module>
exec compile(u'new_strong.plot(vertex_colors=d).show()
File "", line 1, in <module>
File "/usr/lib/sagemath/local/lib/python2.7/site-packages/sage/misc/decorators.py", line 550, in wrapper
return func(*args, **options)
File "/usr/lib/sagemath/local/lib/python2.7/site-packages/sage/graphs/generic_graph.py", line 15706, in plot
return self.graphplot(**options).plot()
File "/usr/lib/sagemath/local/lib/python2.7/site-packages/sage/graphs/generic_graph.py", line 15407, in graphplot
return GraphPlot(graph=self, options=options)
File "/usr/lib/sagemath/local/lib/python2.7/site-packages/sage/graphs/graph_plot.py", line 247, in __init__
self.set_vertices()
File "/usr/lib/sagemath/local/lib/python2.7/site-packages/sage/graphs/graph_plot.py", line 399, in set_vertices
pos += [self._pos[j] for j in vertex_colors[i]]
KeyError: 0
这可能会有所不同,因为 KeyError: 0 有时是 1 或 2,具体取决于一些未知因素。
我提前为我糟糕的代码道歉,并承认我真的不知道自己在做什么,但如果有人能帮助我,我将不胜感激。
我想通了!事实证明错误来自 d 的条目在 new_strong 中没有意义,即那些已经删除的顶点。当 plot() 尝试根据 d.
为顶点着色时,这导致了关键错误