Eulerian Path
Jump to navigation
Jump to search
int S[N << 1], top;
Edge edges[N << 1];
set<int> G[N];
void DFS(int u) {
S[top++] = u;
for (int eid: G[u]) {
int v = edges[eid].get_other(u);
G[u].erase(eid);
G[v].erase(eid);
DFS(v);
return;
}
}
void fleury(int start) {
int u = start;
top = 0; path.clear();
S[top++] = u;
while (top) {
u = S[--top];
if (!G[u].empty())
DFS(u);
else path.push_back(u);
}
}