Takes as input a graph and outputs Eulerian path (if such exists). The worst running time is O(E^2).
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 | # Finding Eulerian path in undirected graph
# Przemek Drochomirecki, Krakow, 5 Nov 2006
def eulerPath(graph):
    # counting the number of vertices with odd degree
    odd = [ x for x in graph.keys() if len(graph[x])&1 ]
    odd.append( graph.keys()[0] )
    if len(odd)>3:
        return None
    
    stack = [ odd[0] ]
    path = []
    
    # main algorithm
    while stack:
        v = stack[-1]
        if graph[v]:
            u = graph[v][0]
            stack.append(u)
            # deleting edge u-v
            del graph[u][ graph[u].index(v) ]
            del graph[v][0]
        else:
            path.append( stack.pop() )
    
    return path
 | 
Example: (a well-known puzzle - how to draw an envelope without lifting a pen) eulerPath({ 1:[2,3], 2:[1,3,4,5], 3:[1,2,4,5], 4:[2,3,5], 5:[2,3,4] })
The worst time complexity can be easily changed into O(E) category. All you have to do is providing different graph representation which allows you deleting an edge in O(1) time.

 Download
Download Copy to clipboard
Copy to clipboard
We can find Complete eulerian path using HIERHOLZERāS Algorithm. Complete C code and explanation available in following link. http://iampandiyan.blogspot.in/2013/10/c-program-to-find-euler-path-or-euler.html