У меня есть график, который реализован как список ребер, соединяющих произвольные узлы, с типами данных, определенными ниже.Как предотвратить циклы при использовании чисто функционального поиска по глубине
type edge = int * int;;
type graph = edge list;;
Как выполнить чисто функциональный поиск по глубине, избегая застревания в цикле? Я не совсем уверен, как отслеживать все посещаемые узлы, оставаясь чисто функциональными. Ответ, вероятно, что-то тривиальное, что я почему-то не понимаю концептуально.
См. Http://stackoverflow.com/a/4655846/69663 - поэтому одним из способов было бы, чтобы ваша функция dfs возвращала не только возможно-найденное значение, но и набор узлов, которые были посещены до сих пор. – unhammer
Вы должны проверить https://hackage.haskell.org/package/fgl, он реализует очень элегантный способ работы с графиками, которые я не мог понять, но, похоже, похож на молнии. –