Assuming the relation's domain and range sets are equal, and that
the relation xRy means "there is a path from node x to node y",
find_shortest_path attempts to find a path with a minimum number
of steps from one given node to another. The path is returned as an
array of nodes (including the starting and ending node), or 0 if no
path was found. If several equally short paths exist, one of them
will be chosen pseudorandomly.
Trying to find a path from a node to itself will always succeed,
returning an array of one element: the node itself. (Or in other
words, a path with no steps, only a starting/ending point).
The argument avoiding is either 0 (or omitted), or a multiset of
nodes that must not be part of the path.