From 56a8dd2b30e462c28d15bae26551b42c2100d4e6 Mon Sep 17 00:00:00 2001 From: hi Date: Tue, 12 Aug 2025 13:28:23 +0000 Subject: [PATCH] bfs: use a Set for visited nodes --- Logic/Graph.hs | 8 +++++--- Logic/Statement.hs | 2 +- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/Logic/Graph.hs b/Logic/Graph.hs index 0aa3be4..ba899ae 100644 --- a/Logic/Graph.hs +++ b/Logic/Graph.hs @@ -1,7 +1,9 @@ module Logic.Graph where -bfs :: Eq a => a -> a -> (a -> [(edge, a)]) -> Maybe [edge] -bfs goal start getEdges = reverse <$> aux [([], start)] [] +import Data.Set (Set, insert) + +bfs :: (Eq a, Ord a) => a -> a -> (a -> [(edge, a)]) -> Maybe [edge] +bfs goal start getEdges = reverse <$> aux [([], start)] mempty where aux [] _ = Nothing aux ((path, vertex):queue) visited @@ -12,7 +14,7 @@ bfs goal start getEdges = reverse <$> aux [([], start)] [] case filter (\(_, v) -> v == goal) new of [] -> let queue' = queue ++ map (\(edge, next) -> (edge:path, next)) new - in aux queue' (vertex:visited) + in aux queue' $ insert vertex visited ((edge, _):_) -> Just (edge:path) getUnvisitedAdjacent vertex visited = diff --git a/Logic/Statement.hs b/Logic/Statement.hs index f85fe26..6d7268b 100644 --- a/Logic/Statement.hs +++ b/Logic/Statement.hs @@ -9,7 +9,7 @@ data Statement | Or Statement Statement | Implies Statement Statement | Iff Statement Statement - deriving (Show, Eq) + deriving (Eq, Ord, Show) atoms :: Statement -> [String] atoms = toAscList . mkSet