Enable Javascript in your browser and then refresh this page, for a much enhanced experience.
First solution in Clear category for One line Drawing by Gabbek
from collections import defaultdict
def convert_to_graph(data):
graph = defaultdict(list)
for a, b, c, d in data:
graph[a, b].append((c, d))
graph[c, d].append((a, b))
return graph
def euler_path(graph):
odd = [x for x in graph.keys() if len(graph[x]) & 1]
if len(odd) == 0:
odd.append(list(graph.keys())[0])
if len(odd) > 2:
return []
stack = [odd[0]]
path = []
while stack:
vertex = stack[-1]
if graph[vertex]:
edge = graph[vertex][0]
stack.append(edge)
del graph[edge][graph[edge].index(vertex)]
del graph[vertex][0]
else:
path.append(stack.pop())
return path
def draw(data):
graph = convert_to_graph(data)
return euler_path(graph)
Oct. 12, 2015