欧拉回路及欧拉路的判断

一、首先是无向图的判断:

欧拉回路:

1)是否存在欧拉回路的条件:每个顶点的度都为偶数

2)直接对图进行dfs,直到寻不到路径时,回溯回来的那条路径即为欧拉回路,只不过是反向的,只要稍微要处理一下方向。

找出回路代码如下:

void dfs(int st)
{
    for(int i=1; i<=50; i++)
    {
        if(Map[st][i])
        {

            Map[i][st]--,Map[st][i]--;
            dfs(i);
            printf("%d %d\n",i,st);

        }

    }

}

此段代码:对于欧拉回路、欧拉路都适用。

欧拉路:

1)存在条件:只有两个顶点度的个数为奇数,其余的都为偶数。

2)求路径:略。

二、其次是有向图的判断:

欧拉回路:

1)判断条件:每个顶点的出度于入度都相等。

2)代码:把无向的改一下就可以了。

void dfs(int st)
{
    for(int i=1; i<=50; i++)
    {
        if(Map[st][i])
        {

            Map[st][i]--;
            dfs(i);
            printf("%d %d\n",st,i);

        }

    }

}

此段代码对欧拉回路、欧拉路都通用。

欧拉路:

1)判断条件:有一个出度比入度大1的点,一个入度比出度大1的点,其余的点都是出度与入度相等。

2)代码:略

你可能感兴趣的:(算法知识点汇总)