{-# LANGUAGE OverloadedStrings, RecordWildCards #-} import System.Environment import System.Directory import Data.Graph.Generators(GraphInfo(..)) import Data.Graph.Generators.Random.ErdosRenyi(erdosRenyiGraph) import Data.Graph.Generators.Random.WattsStrogatz(wattsStrogatzGraph) import Data.Graph.Generators.Random.BarabasiAlbert(barabasiAlbertGraph) import System.Random.MWC(createSystemRandom) import System.IO d = 20 n = 1000 p = toDbl d / toDbl n b = 0.28 m0 = 10 toDbl = fromInteger.toInteger sampleDir = "dist/build/samples" writeGraph :: FilePath -> GraphInfo -> IO () writeGraph path (GraphInfo{..}) = withFile path WriteMode (\handle -> do hPutStrLn handle "strict graph {" mapM (hPutStrLn handle) [ (show x) ++ " -- " ++ (show y) | (x, y) <- edges ] hPutStrLn handle "}" ) main :: IO () main = do args <- getArgs gen <- createSystemRandom eG <- erdosRenyiGraph gen n p wG <- wattsStrogatzGraph gen n d b bG <- barabasiAlbertGraph gen n d createDirectoryIfMissing True "dist/build/samples" writeGraph (sampleDir ++ "/ErdosRenyiGraph.dot") eG writeGraph (sampleDir ++ "/WattsStrogatz.dot") wG writeGraph (sampleDir ++ "/BarabasiAlbertGraph.dot") bG putStrLn "Sample DOT files have been generated in ./dist/build/samples"