基于一笔画定理与度的奇偶判定,利用 Hierholzer 深度优先搜寻回溯算法一气呵成
欧拉图(Eulerian Graph)源于著名的哥尼斯堡七桥问题。在一张无向图 $G = (V, E)$ 中:
vector<int> path; // 记录欧拉路径倒序结果
bool vis[MAXM]; // 标记边是否已访问
void dfs(int u) {
for (auto& edge : g[u]) {
int e_idx = edge.id;
int v = edge.to;
if (!vis[e_idx]) {
vis[e_idx] = true; // 标记此边已用
dfs(v); // 深度优先递归推进
}
}
path.push_back(u); // 回溯时将节点推入结果序列
}
void getEulerPath() {
path.clear();
memset(vis, 0, sizeof(vis));
// 从奇数度顶点出发,若全为偶数度则从任意连通点出发
int start = findStartNode();
dfs(start);
reverse(path.begin(), path.end()); // 倒序翻转得出正向一笔画路径
}