Java 无向(多)图(Hierholzers算法)
我非常坚持使用循环结构来绘制我的图,以完成Eulers巡回 这是我正在绘制的图表,记住它是无向的,所以从N1到N4的旅程与从N4到N1的旅程是一样的(并不意味着光顾只是为了增加我获得帮助的机会) 解决这个问题的方法是找到一个封闭的旅行团集合。然后,如果每条线都被使用了,并且我们已经找到了一组闭合的回路,那么欧拉回路就被找到了 这是我正在处理的图形的图像以及2d数组表示 正如您在我可爱的图像旁边看到的,有一个2d int数组,表示顶点之间的边。我的问题是创建一个循环,该循环在运行时将转到任何顶点,并在起点处结束(对于闭合巡更)。必须有一个数学的,逻辑的方法来做到这一点 我想我需要绕一条线。如果矩阵[column][row]>0(即存在链接),那么矩阵[row][column]--将删除一个链接,但我仍然不确定这将如何帮助我收集封闭巡演的链接 对此我真的很抱歉。我已经尽我所能解释了我的问题,如果你需要更多的信息来尝试和帮助,请告诉我 谢谢Java 无向(多)图(Hierholzers算法),java,algorithm,arrays,loops,Java,Algorithm,Arrays,Loops,我非常坚持使用循环结构来绘制我的图,以完成Eulers巡回 这是我正在绘制的图表,记住它是无向的,所以从N1到N4的旅程与从N4到N1的旅程是一样的(并不意味着光顾只是为了增加我获得帮助的机会) 解决这个问题的方法是找到一个封闭的旅行团集合。然后,如果每条线都被使用了,并且我们已经找到了一组闭合的回路,那么欧拉回路就被找到了 这是我正在处理的图形的图像以及2d数组表示 正如您在我可爱的图像旁边看到的,有一个2d int数组,表示顶点之间的边。我的问题是创建一个循环,该循环在运行时将转到任何顶点
- 检查词汇表顶点(复数:顶点/顶点)也被称为节点。顶点之间的连接称为边。你在对数组的描述中混淆了这一点
- 二维数组称为“邻接矩阵”,严格来说,图像中的数组是无效的,因为缺少多个值
- 在尝试计算Euler漫游之前,您可以进行一些健全性检查
V1 V2 V3 V4 V5
V1 0 0 0 0 0
V2 0 0 1 1 2
V3 0 1 0 1 0
V4 0 1 1 0 0
V5 0 2 0 0 0
V1 V2 V3 V4 V5
V1 0 0 0 0 0
V2 0 0 0 0 2
V3 0 0 0 0 0
V4 0 0 0 0 0
V5 0 2 0 0 0
4.)V3=y(在K1中,度=2)
5.)K2=(3,4,2,3)
3.)移除K2边缘
更新邻接矩阵
V1 V2 V3 V4 V5
V1 0 0 0 0 0
V2 0 0 1 1 2
V3 0 1 0 1 0
V4 0 1 1 0 0
V5 0 2 0 0 0
V1 V2 V3 V4 V5
V1 0 0 0 0 0
V2 0 0 0 0 2
V3 0 0 0 0 0
V4 0 0 0 0 0
V5 0 2 0 0 0
4.)V2=y(在K2中,度=2
5.)K3=(2,5,2)
6.)使用所有边缘
7.)从x=V1开始,我们构建H
H=(1,3
在这里,第一个交叉点与另一个“子”-欧拉旅行(K2)发生,我们将其包括在内
H=(1,3,4,2
另一个交叉口(K3)我们也包括这个交叉口
H=(1,3,4,2,5,2
我们包括了整个行程,并继续我们之前的行程(K2)
H(1,3,4,2,5,2,3
在这里,K2结束,我们回到K1之旅,并遵循这一点
H=(1,3,4,2,5,2,3,1)
完成。找到了欧拉之旅
因此,您可以看到,您提到的算法不能仅通过简单的数组循环来实现。您需要保存一些状态信息,即您已经使用了哪些边,以及您已经找到了哪些“sub”-Euler tours。实际上,他可能能够找到一条Euler路径(只使用所有边一次),而不是tours(或回路,仅使用一次全部并返回起点)只要不均匀度顶点的数量最多为2。此外,邻接矩阵包括N2和N4之间的边,这将使所有顶点度均匀…谢谢。没有注意到他没有在图像中绘制的N2-N4边。他谈到了euler路径,所以我假设他知道euler路径是什么以及与路径/循环的区别尤特。