可行遍性——欧拉图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

猜你喜欢

转载自www.cnblogs.com/Amaris-diana/p/11279028.html