首先,欧拉回路的判断条件必须清楚,这是相对于无向图的
(1)图必须是连通的
(2)图中点的度数必须是偶数
这里以构建一个度全部相同的欧拉回路,并输出欧拉回路的路径
1.构建欧拉回路
连通主要是靠树来保证,首先建立一个度为k的完全图,其中会有很多需要主要的地方
(1)首先构造树 =>保证顶点连通
(2)将度<k的点的度补满
(3)在补满度的过程中肯定会出现有顶点的度不满足的情况,那就要做后处理(由于不会在电脑上作图就不画图了)
如果有一个点的度<k,那就找两个相连的点且这两个点都不与此点相连,那么就断开相连的边,将此点与两个点相连,这样既可以在不破坏原来连通性和度的前提下使
此点的度加2。
eg:点k的度不满,点i和j两点间有边,但是k与i没边,k与j没边 。 操作就是断开i和j的边,连接k和i,连接k与j
如果有两个点的度<k,那么这两个点直接肯定有边,同样找两个相连的点且这两个点分别与度<K的点都不相连,那么就断开度=k的边,然后两个顶点分别连接到度<k的两
个顶点上。
eg: 点m和n两个点的度<k,则m与n之间肯定有边,找到点i和j,且m与i,m与j,n与i,n与j都没有连线,操作,断开i和j的连线,连接m和i,连接n和j
当然还会存在三个度,四个度不满的情况,都分解成这两种情况解决。
2.寻找欧拉回路的路径
(1)给欧拉图的回路进行编号
(2)从某一个顶点开始,先走边编号最大的,边的编号相同的就走顶点下标小的,直至走完所有的边
实现代码如下,由于没有很好的优化,会存在一些错误,希望大家能够指出,其中度k的取值应该为 1<k<n
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
/**********************************************************
*功 能:求每个顶点的度
*返回值: 返回int型每个顶点的度
**********************************************************/
int getdegree(int **a, int row, int vector)
{
int degree = 0;
for(int i=0; i<vector; i+&