10/16/2018 欧拉回路

Introduction: 

七桥问题:

有一条名为Pregel的河流经过Konigsberg城。城中有7座桥,把河中的两个岛与河岸连接起来。当地居民热衷于一个难题:是否存在一条路线,可以不重复地走遍7座桥。该问题由欧拉首先提出。

问题的核心:能否从无向图的一个结点出发走出一条道路,每条边恰好经过一次 -> 欧拉道路

欧拉道路:如果一个图只是一个形成一个连通连通所有节点的链,且每个点只走一次,则成为欧拉道路。

欧拉回路:假设有图G,若图G中的一个回路恰通过G中每条边一次,则称该回路为欧拉回路。

 

在欧拉道路中,“进”和“出”是相对应的 -- 除了起点和终点外,其他点的“进出”次数应该相等。换句话说,其他点的度数(degree)应该是偶数。但在七桥问题中,所有点的进出度数是奇数,因此不可能存在欧拉道路。(节点的入度是指进入该节点的边的条数; 
节点的出度是指从该节点出发的边的条数)

所以,对于无向图来说,满足欧拉回路的条件是:

1. 连通 2. 有且只有两个奇点 a. 两个奇点:欧拉道路 b. 零个奇点:欧拉回路

如果有两个奇点,则必须从一个奇点出发,另一个奇点终止。欧拉道路如果奇点不存在,则可以从任意点出发,最终一定会回到该点。(欧拉回路)

关于有向图的结论(欧拉道路):在一个连通图中,最多只能有两个点的入度不等于出度,而且必须是其中一个点的出度比入度大1(把它作为起点),另一个的入度比出度大1(把它作为终点)


   //G is the graph; vis tells us whether a path has been visited; n is the number of nodes
    public static void eulerPath(int u) {
        for (int v = 0; v < n; v++) {
            if (G[u][v] && vis[u][v] == 0) {
                vis[u][v] = 1;
                //Since this is a undirected graph, severe the connection at both directions
                vis[u][v] = vis[v][u];
                eulerPath(v);
                System.out.println(u + " " + v + "\n");
            }
        }
    }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值