Вот псевдокод, который я только что придумал:
- Начать с любого узла.
- Получить все его пути
- Посмотрите, куда они ведут, если этоузел, который не был посещен, затем посетите его.
- Вызовите ту же функцию рекурсивно для узлов из предыдущих путей.
- Сохраните счетчик для числа путей.
Это будет следующий код на Java (не проверено):
public int getPaths (Node n, Set<Node> nodesVisited) {
int pathCount = 0;
for (Path p : n.getPaths()) {
Node otherSide = p.getOtherNode(n); // Where this function basically takes a node and gets the other node in the path
if (!(nodesVisited.contains(otherSide))) {
nodesVisited.add(otherSide);
pathCount += 1 + getPaths(otherSide, new Set<Nodes>(nodesVisited));
}
}
return pathCount;
}
Это должно найти пути от одного начального узла.Вы можете запустить его на каждом узле, но вы получите несколько дубликатов.Чтобы отсеять их, вы также должны вернуть пути.