Rewrite Bellman-Ford and min-cost flow, especially to stop the latter from crashing.
[match/match.git] / program / Instance.hs
1 module Instance where
2 import Data.Array.IArray
3 import Data.Array.Unboxed
4 import ArrayStuff
5 import Formatter
6
7 type Wt = Double -- must implement RealFrac
8
9 data Instance = Instance
10         Int                 -- numReviewers
11         Int                 -- numProposals
12         (UArray Int Wt)     -- ! reviewer -> relative load
13         (UArray (Int, Int) Wt) -- ! (reviewer, proposal) -> pref
14         deriving Eq
15
16 instance Show Instance where
17         show (Instance numRvrs numProps loadA prefA) =
18                 let theRvrs = [0..numRvrs-1]; theProps = [0..numProps-1] in
19                 "Instance with " ++ show numRvrs ++ " reviewers and " ++ show numProps ++ " proposals:\n" ++ formatTable (
20                             (       ""              : map (\i -> "R#" ++ show i       ) theRvrs) :
21                             (       "RLoad"         : map (\i -> show (loadA ! i)     ) theRvrs) :
22                         map (\j -> ("P#" ++ show j) : map (\i -> show (prefA ! (i, j))) theRvrs) theProps
23                 )