如何找到给定图的最大欧拉子图?通过"最大"我的意思是具有最大边数,顶点或两者的子图。我的想法是找到循环空间的基础并以适当的方式结合基础周期,但我不知道该怎么做(这是一个好主意或不是)。
UPD。已连接源图表。
答案 0 :(得分:1)
一些想法。图是欧拉,如果它是连接的(可能是孤立的顶点),并且所有顶点都有均匀度。
通过去除奇数度顶点对之间的(最短)路径来“满足”第二个标准是“容易的”。
连接是有问题的,因为删除边缘会产生未连接的图形。
显示“简单”(贪婪)解决方案不易生成的示例。通过在两个边(或更多)中分割每个边来修改完整图K5。取两个这些修改过的K5图并从每个图中取两个顶点(A,B来自第一个,C,D来自第二个)。连接A-C和B-D。贪婪的方法将删除这些添加的边缘,因为它们是最短的路径。随着该图形变得无关。解决方案是删除路径A-B和C-D。
在我看来,算法应该在删除边缘时注意子图连接。确保算法应该保留奇度顶点的每个子集,其中没有用于删除它们之间的路径,应该具有大于子集基数的连通性。
我会尝试使用具有优化功能的递归强力解决方案(进行测试)。 O是奇度顶点的列表。
def remove_edges(O, G):
if O is empty:
return solution
for f in O:
for t in O\{f}":
G2 = G without path edges between (f,t)
if G2 is unconnected:
continue
return remove_edges(O\{f,t}, G2)
优化可以是通过具有最短路径的顶点对集合O和O {f}进行排序。这可以通过在去除边缘之前在O的所有顶点对之间找到最短长度来完成。这可以通过BFS从每个O顶点完成。