Используйте DFS для поиска, если какой-либо путь является циклическим
class Node<T> { T value; List<Node<T>> adjacent; }
class Graph<T>{
List<Node<T>> nodes;
public boolean isCyclicRec()
{
for (Node<T> node : nodes)
{
Set<Node<T>> initPath = new HashSet<>();
if (isCyclicRec(node, initPath))
{
return true;
}
}
return false;
}
private boolean isCyclicRec(Node<T> currNode, Set<Node<T>> path)
{
if (path.contains(currNode))
{
return true;
}
else
{
path.add(currNode);
for (Node<T> node : currNode.adjacent)
{
if (isCyclicRec(node, path))
{
return true;
}
else
{
path.remove(node);
}
}
}
return false;
}
Очевидно, есть некоторые сложные проблемы с переводом HAML в ERB, поскольку HAML поддерживает некоторые тонкости, которые нелегко преобразовать обратно в ERB без анализа кода Ruby. Наивная реализация с использованием механизма HAML находится здесь:
попробуйте W2tags, вы даже можете протестировать его вживую: w2tags.heroku.com