一、首先是无向图的判断:
欧拉回路:
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)代码:略