-
欧拉路的存在性判定
-
欧拉图(欧拉回路的存在性)的判定
-
代码实现
-
- 欧拉路的判定
-
欧拉回路的寻找方案
=====================================================================
欧拉路问题——也被称为一笔画问题(Eulerian graph)是图论中一个著名的问题,
由欧拉解决。
给定一张无向图,若存在一个从节点S到节点T的路径,经过每条边一次且仅经过一次(节点可以重复经过),则称路径为S到T的欧拉路。
特别地,若存在一条欧拉路,并且这条欧拉路的起点和终点是同一个起点,则称该路径为欧拉回路。
- 无向图
无向图中存在欧拉路,当且仅当无向图连通,并且图中恰好有两个节点的度数为奇数,其他节点的度数都是偶数。这两个度数为奇数的节点就是欧拉路的起点S和终点T。
- 有向图
入度度数记为-1,出度记为+1,每个节点的度数求和。
那么,存在欧拉路当且仅当仅有一个度数为+1(起点),仅有一个点度数为-1,(终点),其余点的度数都为 0。
一张无向图为欧拉图,当且仅当无向图连通,并且每个点的度数都是偶数。
====================================================================
就是统计一下度即可,比较简单。
(注:欧拉路的寻找与之类似)
DFS + 递归
时间复杂度: O ( n ∗ m ) O(n*m) O(n∗m)
#include
#include
using namespace std;
const int N = 100010;
const int M = 1000010;
int head[N], ver[M], nxt[M], idx = 1;
bool vis[M];
stack st;
void add(int x, int y) {
ver[++idx] = y;
nxt[idx] = head[x];
head[x] = idx;
}
// 遍历 x 所在的环
void dfs(int x) {
for (int i = head[x]; i; i = nxt[i]) {
if (!vis[i]) {
vis[i] = vis[i ^ 1] = true;
int y = ver[i];
dfs(y);
}
}
// 由于递归的特性,是在结尾时记录,而不是在开头时记录。
// 而且这里是逆序的,所以用了栈。
st.push(x);
}
void euler() {
dfs(1);
}
int main() {
int n, m;
cin >> n >> m;
for (int i = 0; i < m; i++) {
int x, y;
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
总结
在清楚了各个大厂的面试重点之后,就能很好的提高你刷题以及面试准备的效率,接下来小编也为大家准备了最新的互联网大厂资料。
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
3739440149)]
[外链图片转存中…(img-RrVxaldp-1713739440150)]
[外链图片转存中…(img-yBNUfxt0-1713739440150)]
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!