+showInstanceAsGraph :: Instance -> [(Int, Int)] -> Gr String String
+showInstanceAsGraph (Instance numRvrs numProps rloadA prefA) matchedPairs =
+ let
+ rvrNode i = i
+ propNode j = numRvrs + j
+ numNodes = numRvrs + numProps
+ theNodes = map (\i -> (rvrNode i, "R#" ++ show i ++
+ " (RLoad " ++ show (rloadA ! i) ++ ")")) [0..numRvrs-1] ++
+ map (\j -> (propNode j, "P#" ++ show j)) [0..numProps-1]
+ parenthesizeIf False s = s
+ parenthesizeIf True s = "(" ++ s ++ ")"
+ theEdges = do
+ i <- [0..numRvrs-1]
+ j <- [0..numProps-1]
+ return (rvrNode i, propNode j,
+ parenthesizeIf (elem (i, j) matchedPairs) $ show (prefA ! (i, j)))
+ in mkGraph theNodes theEdges
+
+-- PROPOSAL-MATCHING EXAMPLES