For any vertex which has only one edge attached to it, if you can solve the puzzle at all, you can still solve it after deciding that the only edge attached to that vertex has a direction pointing at that vertex.
So I would use counters on each vertex to keep track of the number of edges attached to that vertex and repeatedly set the direction for edges which have one end on a vertex with no other attached edge and then delete these edges and their vertices from the graph (or mark them as deleted) and continue.
If this process terminates with an empty graph there are no cycles and you have solved the problem.
If it terminates with one or more cycles in which every vertex has two edges attached to it then pick direction for one edge and follow it round the cycle picking the only possible direction for each edge you come across. If there are multiple cycles you will have to do this more than once to set directions for all the remaining edges.
If this terminates with a vertex with more than two edges attached to it and every vertex with more than one edge attached to it then you have something more complex than cycles and paths and directions cannot be assigned so that every vertex has in-degree at most one.