首页 > 其他 > 详细

欧拉回路

时间:2015-06-20 09:20:30      阅读:451      评论:0      收藏:0      [点我收藏+]

对于给定的图G,如果从某个结点出发走一条道路,使得它恰好通过G的每一条边恰好一次,该路径成为欧拉道路。如果该路径起点终点相同,那么成为欧拉回路(可见,欧拉回路是特殊的欧拉道路)。这也是一笔画问题。

不同的图,欧拉道路和回路的判断条件也不同,当然图都必须是连通图。如果是有向图,存在欧拉道路的条件是没有或者只有两个入度不等于出度的点,并且必须是一个点的出度比入度大一(欧拉道路的起点),一个点的入度比出度大一(欧拉道路的终点);如果所有的点入度等于出度,就是欧拉回路了。 而对于无向图,存在欧拉道路的条件是没有或者只有两个奇点,并且必须从一个奇点出发,另一个奇点结束;如果所有点度数均为偶数,则为欧拉回路。

当确定之后,需要打印出欧拉道路,可利用dfs搜索将走过的边压栈。

//适用于无向图
void euler(int u)
{
    for(int v=1; v<=n; v++)
    {
        if(G[u][v])
        {
            G[u][v]--;
            G[v][u]--;//如果是有向图,该句去掉
            euler(v);
            //压栈
            Edge tmp;
            tmp.u = u;
            tmp.v = v;
            Stack.push(tmp);
        }
    }
}

 

欧拉回路

原文:http://blog.csdn.net/tingyu1995/article/details/46563905

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!