summaryrefslogtreecommitdiff
path: root/content/graph/euler.cpp
blob: fff93719f541c851f73e22309dcbe5327ff19b3c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
vector<vector<pair<int, int>>> adj;
vector<int> cycle;

void addEdge(int u, int v) {
	adj[u].emplace_back(v, sz(adj[v]));
	adj[v].emplace_back(u, sz(adj[u]) - 1); // remove for undirected
}

void euler(int v) {
	while (!adj[v].empty()) {
		auto [u, rev] = adj[v].back();
		adj[v].pop_back();
		if (u == -1) continue;
		adj[u][rev].first = -1; // remove for undirected
		euler(u);
	}
	cycle.push_back(v); // Zyklus in umgekehrter Reihenfolge.
}