Я начал решать эту проблему по-настоящему и работает (DFS с традиционными тремя методами окраски). Тем не менее, мне требуется три раза, чтобы понять, как это сделать, и Хаскелл и я провалились! Предположим, что я представляю граф как список (или карту) node с его узлами смежности.
type Node = Int
type Graph = [(Node, [Node])]
Обратите внимание, что приведенное выше представление может быть направлено или ненаправлено. Я также передаю увиденный набор и законченный набор как аргументы (так как никакие побочные эффекты не являются предпочтительными в функциональности) при выполнении исследования для обнаружения края задней дорожки. Тем не менее, я просто не могу сделать это в Haskell! Я знаю, что может быть использована государственная монада, но эта вещь тоже не пришла мне в голову. Мне любопытно узнать, как кто-нибудь может мне помочь, как это сделать в "красивом" стиле Хаскелла?