hmt-0.18: Music/Theory/Graph/LCF.hs
{- | LCF (Lederberg/Coxeter/Frucht) notation
The notation only applies to Hamiltonian graphs, since it achieves its
symmetry and conciseness by placing a Hamiltonian cycle in a circular
embedding and then connecting specified pairs of nodes with edges. (EW)
-}
module Music.Theory.Graph.LCF where
import Data.Complex {- base -}
import Data.List {- base -}
import qualified Music.Theory.Graph.Type as T {- hmt -}
type LCF = ([Int],Int)
type R = Double
lcf_seq :: LCF -> [Int]
lcf_seq (l,k) = concat (replicate k l)
lcf_degree :: LCF -> Int
lcf_degree (l,k) = length l * k
-- | LCF to edge list.
lcf_to_edg :: LCF -> T.EDG
lcf_to_edg (l,k) =
let v_n = length l * k
add i j = (i + j) `mod` v_n
v = [0 .. v_n - 1]
in ((v_n,v_n + (v_n `div` 2))
,concat [[(i,i `add` 1) | i <- v]
,nub (sort (map T.e_sort (zip v (zipWith add v (lcf_seq (l,k))))))])
-- | LCF edge-list to graph labeled with circular co-ordinates.
edg_circ_gr :: R -> T.EDG -> T.LBL (R,R) ()
edg_circ_gr rad ((n,_),e) =
let polar_to_rectangular (mg,ph) = let c = mkPolar mg ph in (realPart c,imagPart c)
ph_incr = (2 * pi) / fromIntegral n
v = zip [0 .. n - 1] (map polar_to_rectangular (zip (repeat rad) [0, ph_incr ..]))
in (v,zip e (repeat ()))
{- | LCF graph set given at <http://mathworld.wolfram.com/LCFNotation.html>
> length lcf_mw_set == 57
> length (nub (map snd lcf_mw_set)) == 57 -- IE. UNIQ
-}
lcf_mw_set :: [(String, LCF)]
lcf_mw_set =
[("Tetrahedral graph",([2,-2],2)) -- ([2],4)
,("Utility graph",([3],6)) -- ([3,-3],3)
,("3-prism graph",([-3,-2,2],2))
,("Cubical graph",([3,-3],4))
,("Wagner graph",([4],8))
,("3-matchstick graph",([-2,-2,2,2],2))
,("4-Möbius ladder",([-4],8))
,("5-Möbius ladder",([-5],10))
,("5-prism graph",([-5,3,-4,4,-3],2))
,("Bidiakis cube",([6,4,-4],4))
,("Franklin graph",([5,-5],6))
,("Frucht graph",([-5,-2,-4,2,5,-2,2,5,-2,-5,4,2],1))
,("Truncated tetrahedral graph",([2,6,-2],4))
,("Generalized Petersen graph (6,2)",([-5,2,4,-2,-5,4,-4,5,2,-4,-2,5],1))
,("6-Möbius ladder",([-6],12))
,("6-prism graph",([-3,3],6))
,("Heawood graph",([5,-5],7))
,("Generalized Petersen graph (7,2)",([-7,-5,4,-6,-5,4,-4,-7,4,-4,5,6,-4,5],1))
,("7-Möbius ladder",([-7],14))
,("7-prism graph",([-7,5,3,-6,6,-3,-5],2))
,("Cubic vertex-transitive graph Ct19",([-7,7],8))
,("Möbius-Kantor graph",([5,-5],8))
,("8-Möbius ladder",([-8],16))
,("8-prism graph",([-3,3],8))
,("Pappus graph",([5,7,-7,7,-7,-5],3))
,("Cubic vertex-transitive graph Ct20",([-7,7],9)) -- ([5,-5],9)
,("Cubic vertex-transitive graph Ct23",([-9,-2,2],6))
,("Generalized Petersen graph (9,2)",([-9,-8,-4,-9,4,8],3))
,("Generalized Petersen graph (9,3)",([-9,-6,2,5,-2,-9,5,-9,-5,-9,2,-5,-2,6,-9,2,-9,-2],1))
,("9-Möbius ladder",([-9],18))
,("9-prism graph",([-9,7,5,3,-8,8,-3,-5,-7],2))
,("Desargues graph",([5,-5,9,-9],5))
,("Dodecahedral graph",([10,7,4,-4,-7,10,-4,7,-7,4],2))
,("Cubic vertex-transitive graph Ct25",([-7,7],10))
,("Cubic vertex-transitive graph Ct28",([-6,-6,6,6],5))
,("Cubic vertex-transitive graph Ct29",([-9,9],10))
,("Generalized Petersen graph (10,4)",([-10,-7,5,-5,7,-6,-10,-5,5,6],2))
,("Largest cubic nonplanar graph with diameter 3",([-10,-7,-5,4,7,-10,-7,-4,5,7,-10,-7,6,-5,7,-10,-7,5,-6,7],1))
,("10-Möbius ladder",([-10],20))
,("10-prism graph",([-3,3],10))
,("McGee graph",([12,7,-7],8))
,("Truncated cubical graph",([2,9,-2,2,-9,-2],4))
,("Truncated octahedral graph",([3,-7,7,-3],6))
,("Nauru graph",([5,-9,7,-7,9,-5],4))
,("F26A graph",([-7,7],13))
,("Tutte-Coxeter graph",([-13,-9,7,-7,9,13],5))
,("Dyck graph",([5,-5,13,-13],8))
,("Gray graph",([-25,7,-7,13,-13,25],9))
,("Truncated dodecahedral graph",([30,-2,2,21,-2,2,12,-2,2,-12,-2,2,-21,-2,2,30,-2,2,-12,-2,2,21,-2,2,-21,-2,2,12,-2,2],2))
,("Harries graph",([-29,-19,-13,13,21,-27,27,33,-13,13,19,-21,-33,29],5))
,("Harries-Wong graph",([9,25,31,-17,17,33,9,-29,-15,-9,9,25,-25,29,17,-9,9,-27,35,-9,9,-17,21,27,-29,-9,-25,13,19,-9,-33,-17,19,-31,27,11,-25,29,-33,13,-13,21,-29,-21,25,9,-11,-19,29,9,-27,-19,-13,-35,-9,9,17,25,-9,9,27,-27,-21,15,-9,29,-29,33,-9,-25],1))
,("Balaban 10-cage",([-9,-25,-19,29,13,35,-13,-29,19,25,9,-29,29,17,33,21,9,-13,-31,-9,25,17,9,-31,27,-9,17,-19,-29,27,-17,-9,-29,33,-25,25,-21,17,-17,29,35,-29,17,-17,21,-25,25,-33,29,9,17,-27,29,19,-17,9,-27,31,-9,-17,-25,9,31,13,-9,-21,-33,-17,-29,29],1))
,("Foster graph",([17,-9,37,-37,9,-17],15))
,("Biggs-Smith graph",([16,24,-38,17,34,48,-19,41,-35,47,-20,34,-36,21,14,48,-16,-36,-43,28,-17,21,29,-43,46,-24,28,-38,-14,-50,-45,21,8,27,-21,20,-37,39,-34,-44,-8,38,-21,25,15,-34,18,-28,-41,36,8,-29,-21,-48,-28,-20,-47,14,-8,-15,-27,38,24,-48,-18,25,38,31,-25,24,-46,-14,28,11,21,35,-39,43,36,-38,14,50,43,36,-11,-36,-24,45,8,19,-25,38,20,-24,-14,-21,-8,44,-31,-38,-28,37],1))
,("Balaban 11-cage",([44,26,-47,-15,35,-39,11,-27,38,-37,43,14,28,51,-29,-16,41,-11,-26,15,22,-51,-35,36,52,-14,-33,-26,-46,52,26,16,43,33,-15,17,-53,23,-42,-35,-28,30,-22,45,-44,16,-38,-16,50,-55,20,28,-17,-43,47,34,-26,-41,11,-36,-23,-16,41,17,-51,26,-33,47,17,-11,-20,-30,21,29,36,-43,-52,10,39,-28,-17,-52,51,26,37,-17,10,-10,-45,-34,17,-26,27,-21,46,53,-10,29,-50,35,15,-47,-29,-41,26,33,55,-17,42,-26,-36,16],1))
,("Ljubljana graph",([47,-23,-31,39,25,-21,-31,-41,25,15,29,-41,-19,15,-49,33,39,-35,-21,17,-33,49,41,31,-15,-29,41,31,-15,-25,21,31,-51,-25,23,9,-17,51,35,-29,21,-51,-39,33,-9,-51,51,-47,-33,19,51,-21,29,21,-31,-39],2))
,("Tutte 12-cage",([17,27,-13,-59,-35,35,-11,13,-53,53,-27,21,57,11,-21,-57,59,-17],7))]
-- Local Variables:
-- truncate-lines:t
-- End: