• 欧拉回路


    1. 欧拉通路、欧拉回路、欧拉图
    无向图:
    1) 设G是连通无向图,则称经过G的每条边一次并且仅一次的路径为欧拉通路;
    2) 如果欧拉通路是回路(起点和终点是同一个顶点),则称此回路为欧拉回路(Euler circuit);
    3) 具有欧拉回路的无向图G称为欧拉图(Euler graph)。
    有向图:
    1) 设D是有向图,D的基图连通,则称经过D的每条边一次并且仅一次的有向路径为有向欧拉通路;
    2) 如果有向欧拉通路是有向回路,则称此有向回路为有向欧拉回路(directed Euler circuit);
    3) 具有有向欧拉回路的有向图D称为有向欧拉图(directed Euler graph)。

    2. 定理及推论

    欧拉通路和欧拉回路的判定是很简单的,请看下面的定理及推论。
    定理5.1 无向图G存在欧拉通路的充要条件是:G为连通图,并且G仅有两个奇度结点(度数为奇数的顶点)或者无奇度结点。
    推论5.1:

    1) 当G是仅有两个奇度结点的连通图时,G的欧拉通路必以此两个结点为端点。
    2) 当G是无奇度结点的连通图时,G必有欧拉回路。
    3) G为欧拉图(存在欧拉回路)的充分必要条件是G为无奇度结点的连通图。

    定理5.2 有向图D存在欧拉通路的充要条件是:
    D为有向图,D的基图连通,并且所有顶点的出度与入度都相等;或者除两个顶点外,其余顶点的出度与入度都相等,而这两个顶点中一个顶点的出度与入度之差为1,另一个顶点的出度
    与入度之差为-1。
    推论5.2:
    1) 当D除出、入度之差为1,-1的两个顶点之外,其余顶点的出度与入度都相等时,D的有向欧拉通路必以出、入度之差为1的顶点作为始点,以出、入度之差为-1的顶点作为终点。
    2) 当D的所有顶点的出、入度都相等时,D中存在有向欧拉回路。
    3) 有向图D为有向欧拉图的充分必要条件是D的基图为连通图,并且所有顶点的出、入度都相等。

    3. 欧拉回路的应用

    • 哥尼斯堡七桥问题
    • 一笔画问题。
    • 旋转鼓轮的设计

    欧拉回路最著名的有三个应用,大家可以网上百度一下,这里不详述。

    4.怎样判断一个图是否存在欧拉回路

    判断欧拉回路是否存在的方法

    有向图:图连通,所有的顶点出度=入度。

    无向图:图连通,所有顶点都是偶数度。

    void print(int u){
         for (int i=1;i<=50;i++){
            if(tu[u][i]){
                tu[u][i]--;
                tu[i][u]--;
                print(i);
                printf("%d %d ",i,u);
            }
         }
    }

    scanf("%d",&n);
            for (int i=1;i<=n;i++){
                scanf("%d %d",&u,&v);
                du[u]++;
                du[v]++;
                tu[u][v]++;
                tu[v][u]++;
            }
            int j;
            for (j=1;j<=50;j++){
                if(du[j]%2) break;
            }
            if(j<=50) printf("some beads may be lost ");
            else {
                for (int i=1;i<=50;i++)
                    print(i);
            }

    输出欧拉路径时使用dfs,先序(逆序)输出

  • 相关阅读:
    【转】vue常用开发ui框架(app,后台管理系统,移动端)及插件
    【转】VUE 组件转换为微信小程序组件的方法
    【转】微信小程序原生代码快速转换mpuve(vue)代码(仅供娱乐)
    goim Go 开发的 IM 和推送服务
    h5 canvas 多张图片合成并保存到手机相册
    netcore中设置环境变量ASPNETCORE_ENVIRONMENT
    Cookie 和 Session 区别是什么?
    python中的字符串格式化输出
    模型训练时样本类别不均衡怎么办?
    NumPy 数组索引、维度增加、拼接
  • 原文地址:https://www.cnblogs.com/lmjer/p/8178657.html
Copyright © 2020-2023  润新知