From dad6ba11460ee0d48fd1d3915eede45bb1dd0e80 Mon Sep 17 00:00:00 2001 From: FP10 Uebungsteilnehmer 0726236 Date: Tue, 16 Nov 2010 08:37:20 +0100 Subject: [PATCH] fertig... fast --- Aufgabe5.hs | 99 ++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 98 insertions(+), 1 deletion(-) diff --git a/Aufgabe5.hs b/Aufgabe5.hs index 4ba2805..277cda8 100644 --- a/Aufgabe5.hs +++ b/Aufgabe5.hs @@ -1 +1,98 @@ --- +type Cost = Integer +type Vertex = Integer +type MaxVertexNo = Integer +type Edge = (Vertex,Cost,Vertex) +type Row = [Integer] + +data ALgraph = ALg [(Vertex,[(Vertex,Cost)])] deriving (Eq,Show) +data ELgraph = ELg MaxVertexNo [Edge] deriving (Eq,Show) +data AMgraph = AMg [Row] deriving (Eq,Show) + +type Inp = (MaxVertexNo,[(Vertex,Vertex,Cost)]) + + +--Aufg 1 +isValid :: Inp -> Bool +isValid (mvert,list) = (and( [ (checkValidEl (list!!index) mvert) | index <- [0..((min (fromEnum mvert) (length list))-1)] ] )) && (ckeckValidLinks list) + +checkValidEl :: (Vertex,Vertex,Cost) -> MaxVertexNo -> Bool +checkValidEl (from,to,cost) mi | ((from > mi) || (to > mi)) = False +checkValidEl (from,to,cost) mi | (cost <= 0) = False +checkValidEl (_,_,_) _ = True + +ckeckValidLinks :: [(Vertex,Vertex,Cost)] -> Bool +ckeckValidLinks [] = True +ckeckValidLinks xs = ((length xs) == (length (undup xs))) + +undup :: [(Vertex,Vertex,Cost)] -> [(Vertex,Vertex,Cost)] +undup [] = [] +undup ((f,t,c):xs) = (f,t,c) : undup (filter (\(x,y,z) -> not ((f == x) && (t == y))) xs) + + + +--Aufg2 +inp2el :: Inp -> ELgraph +inp2el (vnum, xs) = ELg vnum [ (inp2elConv x) | x <- xs] + +inp2elConv :: (Vertex,Vertex,Cost) -> (Vertex,Cost,Vertex) +inp2elConv (f,t,c) = (f,c,t) + + + +el2al :: ELgraph -> ALgraph +el2al (ELg maxV el) = ALg ([(el2alGet el (toInteger i)) | i <- [0..((length el)-1)]] ++ [(i,[]) | i <- [(toInteger (length el))..maxV]]) + +el2alGet :: [Edge] -> Integer -> (Vertex,[(Vertex,Cost)]) +el2alGet e i = (i, concat([ (el2alRet el i) | el <- e])) + +el2alRet :: Edge -> Integer -> [(Vertex,Cost)] +el2alRet (f,c,t) i | (f == i) = [(t,c)] +el2alRet _ _ = [] + + + +al2am :: ALgraph -> AMgraph +al2am (ALg al) = AMg [[ al2amEl al (toInteger i) (toInteger j) | j <- [0..((length al)-1)]] | i <- [0..((length al)-1)]] + +al2amEl :: [(Vertex,[(Vertex,Cost)])] -> Integer -> Integer -> Integer +al2amEl xs i j | ((toInteger (length xs)) > i) = al2amRow (xs!!(fromEnum i)) j + +al2amRow :: (Vertex,[(Vertex,Cost)]) -> Integer -> Integer +al2amRow (v,xs) j = al2amVal xs j + +al2amVal :: [(Vertex,Cost)] -> Integer -> Integer +al2amVal [] i = 0 +al2amVal ((v,c):xs) i | (v /= i) = al2amVal xs i +al2amVal ((v,c):xs) i | (v == i) = c + + + +am2el :: AMgraph -> ELgraph +am2el (AMg m) = ELg (toInteger ((length m)-1)) (concat [ (concat [ am2elC ((m!!(fromEnum i))!!(fromEnum j)) (toInteger i) (toInteger j) | j <- [0..((length m)-1)]]) | i <- [0..((length m)-1)]]) + +am2elC :: Cost -> Vertex -> Vertex -> [Edge] +am2elC c f t | (c == 0) = [] +am2elC c f t = [(f,c,t)] + + +-- abgeleitet +el2am :: ELgraph -> AMgraph +el2am eg = al2am (el2al eg) + +al2el :: ALgraph -> ELgraph +al2el ag = am2el (al2am ag) + +am2al :: AMgraph -> ALgraph +am2al am = el2al (am2el am) + + + + +-- Aufg 3 +isNeighbourOf :: ELgraph -> Vertex -> Vertex -> Bool +isNeighbourOf _ _ _ = True + +isOnCycle :: ALgraph -> Vertex -> Cost -> Bool +isOnCycle _ _ _ = False + + -- 2.43.0