how to find all negative weight cycles(elementary circuit) in a strongly connected directed graph? I can use Bellman-Ford to get some of the elementary negative weight cycles in a graph. It's not guaranteed to always get all of them.
(Elementary Cycle: A cycle is elementary if no vertex but the first and last appears twice.)
But I want to find ALL elementary negative weight cycles. Even taking each vertex as the source will not always get ALL negative weight cycles.
Take this graph for example:

With Bellman-Ford, starting from any vertex, I can only get one cycle &quot;U→H→U&quot;.
The cycle &quot;U→S→U&quot; is always missing.
Is there any algorithm with which I can find all negative weight cycles reliably?
My current strategy is:

first enumerate all elementary cycles. I use the hawick algorithm which is already implemented in the c++ boost library.
sum all the weights of edges in each cycle and then check if the sum is negative.