2021.05.09 关于欧拉回路为什么倒着输出
void dfs(int x){
for(int i=1;i<=150;i++){
if(dis[x][i]){
--dis[x][i];
--dis[i][x];
dfs(i);
}
}
ans[++top]=x;
}
// 洛谷1341
dfs寻找路径的时候本来就是 一级一级向下寻找,最后一级一级向上返回值 ,这时候,ans[]就变为从终点到起点的路径,因而需要倒着输出
定义
如果图G(有向图或者无向图)中所有边一次仅且一次行遍所有顶点的通路称作欧拉通路。
如果图G中所有边一次仅且一次行遍所有顶点的回路称作欧拉回路。
具有欧拉回路的图称为欧拉图(简称E图)。具有欧拉通路但不具有欧拉回路的图称为半欧拉图。
性质
欧拉回路:一个欧拉回路,删掉一个点,仍然是一个欧拉回路。从一个欧拉回路拖走一个小欧拉回路,结果也是一个欧拉回路。
判定
欧拉回路:1: 图G是连通的,不能有孤立点存在。
2: 对于无向图来说度数为奇数的点个数为0;对于有向图来说每个点的入度必须等于出度。
欧拉通路:1: 图G是连通的,无孤立点存在。
2: 对于无向图来说,度数为奇数的的点可以有2个或者0个,并且这两个奇点其中一个为起点另外一个为终点。对于有向图来说,可以存在两个点,其入度不等于出度,其中一个入度比出度大1,为路径的起点;另外一个出度比入度大1,为路径的终点。
fleury算法
桥:删掉该边后剩下所有的顶点不能联通
设图G中删去已走过的路径所剩下的图为图E,每次寻找E中的非桥的边,直到不能选择为止。
Hierholzer 算法
1.选择任一顶点为起点,遍历所有相邻边。
2.深度搜索,访问相邻顶点。将经过的边都删除。
3.如果当前顶点没有相邻边,则将顶点入栈。
4.栈中的顶点倒序输出,就是从起点出发的欧拉回路。