I actually understood the method done in Euler Tour algorithm but don't understand why it works? Here is the pseudo.
dfs (v): for u in adj[v]: erase the edge v-u and dfs(u) push v at the end of e
# | User | Rating |
---|---|---|
1 | tourist | 4009 |
2 | jiangly | 3823 |
3 | Benq | 3738 |
4 | Radewoosh | 3633 |
5 | jqdai0815 | 3620 |
6 | orzdevinwang | 3529 |
7 | ecnerwala | 3446 |
8 | Um_nik | 3396 |
9 | ksun48 | 3390 |
10 | gamegame | 3386 |
# | User | Contrib. |
---|---|---|
1 | cry | 167 |
2 | Um_nik | 163 |
3 | maomao90 | 162 |
3 | atcoder_official | 162 |
5 | adamant | 159 |
6 | -is-this-fft- | 158 |
7 | awoo | 157 |
8 | TheScrasse | 154 |
9 | Dominater069 | 153 |
9 | nor | 153 |
I actually understood the method done in Euler Tour algorithm but don't understand why it works? Here is the pseudo.
dfs (v): for u in adj[v]: erase the edge v-u and dfs(u) push v at the end of e
Name |
---|
Before running this algorithm, you need to check whether a Euler tour actually exists (even degree for all vertices in connected undirected graph). Suppose you start at node v. Then for ALL other nodes, since degree is even, if you can "enter" that node by some edge, you can most definitely "exit" it too. Because for every incoming edge, there is some outgoing edge (as degree is even). So, the only way for your algorithm to terminate is at vertex v, i.e. when you've exhausted every edge in the graph.
This is the most intuitive explanation for me. :)