可行遍性——欧拉图and哈密顿图

Posted amaris-diana

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了可行遍性——欧拉图and哈密顿图相关的知识,希望对你有一定的参考价值。

可行遍性——欧拉图and哈密顿图

 

1.欧拉回路

  欧拉回路:图G的一个回路,若他恰巧通过G中每条边一次,则称该回路为欧拉回路。欧拉回路就是就是从图上一点出发,经过所有的边且只经过一次,最终回到起点的路径。

技术图片
 1 #include<algorithm>
 2 #include<iostream>
 3 #include<cstring>
 4 #include<cstdio>
 5 #include<cmath>
 6 #include<map>
 7 using namespace std;
 8 const int maxv= 110;
 9 const int maxe= 5010;  //可能的最大值
10 
11 struct ENode
12 
13     int to;
14     int Next;
15 ;
16 ENode edegs[maxe];
17 int Head[maxv], tnt;
18 void init()
19 
20     memset(Head, -1, sizeof(Head));
21     tnt= -1;
22 
23 void Add_ENode (int a, int b)
24 
25     ++ tnt;
26     edegs[tnt].to= b;
27     edegs[tnt].Next= Head[a];
28     Head[a]= tnt;
29     ++ tnt;
30     edegs[tnt].to= a;
31     edegs[tnt].Next= Head[b];
32     Head[b]= tnt;
33 
34 
35 int oLaData[maxe];
36 int oLa_cnt;
37 bool visit[maxe];
38 void oLa_dfs(int u)
39 
40     for (int k= Head[u]; k!= -1; k= edegs[k].Next)
41     
42         if (! visit[k])
43         
44             visit[k]= 1;   //标记当前边已走过
45             visit[k^ 1]= 1;  
46             oLa_dfs(edegs[k].to);  
47             oLaData[oLa_cnt ++]= k;  //回溯过程中记录边
48         
49     
50 
51 
52 int main()
53 
54     int n;
55     /*建图*/
56     /*判断欧拉回路是否存在*/
57     oLa_dfs(1);
58     return 0;
59 
View Code

 

以上是关于可行遍性——欧拉图and哈密顿图的主要内容,如果未能解决你的问题,请参考以下文章

哈密顿回路算法详解

图论:平面图和图的着色

离散数学-图论-哈密顿图及其应用

欧拉路径和欧拉回路判断方法

10.5欧拉路径和欧拉回路(Euler Paths and Circuits)

哈密顿图的判定