Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 有没有从无向邻接列表中快速找到Euler回路的方法?_Java_Adjacency List_Adjacency Matrix - Fatal编程技术网

Java 有没有从无向邻接列表中快速找到Euler回路的方法?

Java 有没有从无向邻接列表中快速找到Euler回路的方法?,java,adjacency-list,adjacency-matrix,Java,Adjacency List,Adjacency Matrix,出于测试目的,我使用以下邻接矩阵: A B C D E F A 0 1 1 0 0 0 B 1 0 1 1 1 0 C 1 1 0 1 1 0 D 0 1 1 0 1 1 E 0 1 1 1 0 1 F 0 0 0 1 1 0 由此,我可以得到以下邻接列表: A: B C B: A C

出于测试目的,我使用以下邻接矩阵:

    A   B   C   D   E   F
A   0   1   1   0   0   0  
B   1   0   1   1   1   0  
C   1   1   0   1   1   0  
D   0   1   1   0   1   1  
E   0   1   1   1   0   1  
F   0   0   0   1   1   0
由此,我可以得到以下邻接列表:

A:  B   C 
B:  A   C   D   E 
C:  A   B   D   E 
D:  B   C   E   F 
E:  B   C   D   F 
F:  D   E  
有没有一种快速的方法可以从这个列表中找到Euler回路?如果是这样的话,假设我可以用这个方法在列表的任何子集中找到可能的欧拉回路,这是正确的吗


感谢您的时间。

要知道无向图中是否存在欧拉路径,必须满足两个条件:

  • 所有非零度的顶点都属于单个连接组件
  • 每个顶点的阶数必须是偶数
例如下面的图表

不允许欧拉回路,因为无法从左子图到达右子图的边,反之亦然

可以使用DFS或BFS方法检查图是否是线性时间内的单个连接组件(相对于图的边和顶点的数量)。从具有非零度的任何顶点开始,检查是否可以到达图形的任何其他顶点(具有零度的顶点除外,但根据定义无法到达它们)

完成后,检查每个顶点的阶数是否均匀

在这一点上,你知道欧拉回路一定存在。要找到一个,您可以使用Fleury算法(例如,web上有许多示例)

Fleury算法的时间复杂度为O(| E |),其中E表示边集。但在运行该算法时,还需要检测网桥。您可以使用Tarjan算法检测桥梁,该算法的时间复杂度为O(|V|+|E|)

所以Fleury算法的总时间复杂度是O(| E | 2)


因此,从相邻列表所产生的图表中:

  • 从A开始(任意)
  • 从A到B的行程(任意)
  • 从B到C的行程(任意)
  • 现在必须移动到D,因为边A-C是桥边
  • 从D到B的行程(任意)
  • 从B旅行到E(你没有选择)
  • 从E到F(因为E-C是桥边,所以不能到C)
  • 现在你没有选择,所以

  • 从F到D的旅行
  • 从D到E旅行
  • 从E到C的旅行
  • 从C旅行到A

  • 所以欧拉电路是A-B-C-D-B-E-F-D-E-C-A。

    我想我可能已经找到了一种方法,需要一点时间来编码,你说子集是什么意思?您可以很容易地验证是否存在欧拉回路:每个顶点的阶数都是偶数(给定图形是无向的)…您能确认一个可能的答案吗?字符串[]路径={“BA”,“AC”,“CB”,“BD”,“DE”,“EF”,“FD”,“DC”,“CE”,“EB”}工作吗?(索引是路径#)看。哦,是的,CommuSoft所说的是我建立的算法的更清晰版本,我甚至不确定我的算法是否正确。用它!