![]() |
VOOZH | about |
Given an undirected connected graph with v nodes, and e edges, with adjacency list adj. We need to write a function that returns 2 if the graph contains an eulerian circuit or cycle, else if the graph contains an eulerian path, returns 1, otherwise, returns 0.
A graph is said to be Eulerian if it contains an Eulerian Cycle, a cycle that visits every edge exactly once and starts and ends at the same vertex.
If a graph contains an Eulerian Path, a path that visits every edge exactly once but starts and ends at different vertices, it is called Semi-Eulerian.
Examples:
Input:
Output: 1
Input:
Output: 2
Input:
Output: 0
The problem can be framed as follows: "Is it possible to draw a graph without lifting your pencil from the paper and without retracing any edge?"
At first glance, this may seem similar to the Hamiltonian Path problem, which is NP-complete for general graphs. However, determining whether a graph has an Eulerian Path or Cycle is much more efficient: It can be solved in O(v + e) time.
The idea is to use some key properties of undirected graphs that help determine whether they are Eulerian (i.e., contain an Eulerian Path or Cycle) or not.
Eulerian Cycle
A graph has an Eulerian Cycle if and only if the below two conditions are true
- All vertices with non-zero degree are part of a single connected component. (We ignore isolated verticesβ those with zero degree β as they do not affect the cycle.)
- Every vertex in the graph has an even degree.
Eulerian Path
A graph has an Eulerian Path if and only if the below two conditions are true
- All vertices with non-zero degree must belong to the same connected component. (Same as Eulerian Cycle)
- Exactly Zero or Two Vertices with Odd Degree:
- If zero vertices have odd degree β Eulerian Cycle exists (which is also a path).
- If two vertices have odd degree β Eulerian Path exists (but not a cycle).
- If one vertex has odd degree β Not possible in an undirected graph. (Because the sum of all degrees in an undirected graph is always even.)
Note: A graph with no edges is trivially Eulerian. There are no edges to traverse, so by definition, it satisfies both Eulerian Path and Cycle conditions.
How Does This Work?
- In an Eulerian Path, whenever we enter a vertex (except start and end), we must also leave it. So all intermediate vertices must have even degree.
- In an Eulerian Cycle, since we start and end at the same vertex, every vertex must have even degree. This ensures that every entry into a vertex can be paired with an exit.
Steps to implement the above idea:
1
Time Complexity: O(v + e), DFS traverses all vertices and edges to check connectivity and degree.
Space Complexity: O(v + e), Space used for visited array and adjacency list to represent graph.