module Exercise_5 where {-import Test.QuickCheck-} import Data.List {- H5.3 -} {-WETT-} type Vertex = Int type Edge = (Vertex, Vertex) type Graph = ([Vertex], [Edge]) longestPath :: Graph -> Vertex -> Int containsEdgeTo _ [] = False containsEdgeTo v (x:xs) = if (v == snd x) then True else containsEdgeTo v xs start g = [x | x <- fst g, not (containsEdgeTo x (snd g))] !! 0 longestPath g z = lp (snd g) (start g) z lPath g s z = undefined nach e w = [v | (v,w1) <- e, w1 == w] {- Start s, Knoten v-} lp e s v = (if (v == s) then 0 else maximum ([(1 + lp e s vn) | vn <- vorgaenger] ++ [-999999999])) where vorgaenger = (nach e v) {--} {-TTEW-} {- -- generates a DAG with u vertices and only one node without incoming edges -- you can use this function to test your implementation using QuickCheck genDag :: Int -> Gen Graph genDag n = let v = [1..n] in do b <- mapM (\i -> choose (1,n-i)) [1..n-1] t <- mapM (\(c,i) -> vectorOf c (choose (i+1, n))) (zip b [1..n]) let e = nub $ ([(1, i) | i<-[2..n]] ++ edges t 1 []) return $ (v,e) where edges [] _ acc = acc edges (ts:xs) i acc = edges xs (i+1) (acc ++ [(i,t) | t<-ts]) -}