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