首先非常痛心疾首地说一句,欧拉回路自己之前只是看过代码,知道思想,从来没有亲手实现过,所以,,,伤亡惨重!!!

欧拉回路是一个非常有意思的图论模型,因为伟大的数学家欧拉(euler)而得名。传说,曾经人们沉迷于一个七桥问题,想找出一种走法不重复地经过七座桥(具体请自行了解)。欧拉指出了不存在这样的走法,并由此归结出了“一笔画问题”。用图论的语言来说,就是找一条路径不重复地走过所有的边。

实际上,从一个点出发,不重复地经过所有的边,这叫做欧拉道路;如果这条路径起点和终点相同,才称为欧拉回路。另外,如果一个图存在欧拉道路,那么称为半欧拉图,如果一个图存在欧拉回路,称为欧拉图。

对于无向图,存在欧拉道路的条件是只有两个或不存在奇点(度为奇数的点),存在欧拉回路的条件是不存在奇点。对于有向图,存在欧拉道路的条件是只有两个点的入度和出度不相同,并且其中一个点(起点)的出度比入度大1,另一个点(终点)的入度比出度大1,或者所有点的入度和出度都相等,存在欧拉回路的条件是所有点的入度和出度都相等。当然图必须是连通的。

寻找欧拉道路或者欧拉回路是比较简单的,可以使用DFS。起点的确定也需要注意,如果找欧拉道路,必须找到相应的起点,而欧拉回路任选一个点作为起点即可。

1 void euler(int u) {
2     for(int v=1;v<=n;++v)
3         if(G[u][v]) {
4             G[u][v]=G[v][u]=0; //有向图则改为G[u][v]=0;
5             euler(v);
6         }
7     ans.push(u);
8 }
寻找欧拉道路或欧拉回路(无向图)

相关文章:

  • 2021-11-19
  • 2021-06-07
  • 2022-12-23
  • 2022-12-23
  • 2022-03-06
  • 2021-08-27
  • 2021-09-14
猜你喜欢
  • 2021-07-28
  • 2021-12-05
  • 2022-12-23
  • 2022-12-23
  • 2021-08-11
  • 2022-02-15
  • 2021-07-29
相关资源
相似解决方案