Skip to content

Instantly share code, notes, and snippets.

@rik0
Created March 16, 2011 08:44
Show Gist options
  • Save rik0/872202 to your computer and use it in GitHub Desktop.
Save rik0/872202 to your computer and use it in GitHub Desktop.
(defn graph-stats [^Graph g]
(vector (clustering-coefficient g)
(average-shortest-paths g)
(diameter g)))
(defn print-table [graph-generator sizes]
(println "+----------+------------+------------+------------+")
(println "| size | C | APL | D |")
(println "+----------+------------+------------+------------+")
(doseq [s sizes]
(let [g (graph-generator s)]
(show-graph g (str "GRAPH" s))
(println
(apply format
"| % 8d | % 10f | % 10f | % 10f |"
s (graph-stats g)))
(println "+----------+------------+------------+------------+"))))
(defn edge-factory []
(proxy [Factory] []
(create []
(gensym "E"))))
(defn vertex-factory []
(proxy [Factory] []
(create []
(gensym "V"))))
(defn make-erdos-renyi [p size]
(let [generator
(ErdosRenyiGenerator. (UndirectedSparseGraph/getFactory)
(vertex-factory)
(edge-factory)
size
p)]
(.create generator)))
(defn make-barabasi-albert [m starting size]
(let [^Collection nodes (range starting)
gg (BarabasiAlbertGenerator.
(UndirectedSparseGraph/getFactory)
(vertex-factory)
(edge-factory) starting m (HashSet. nodes))]
(.evolveGraph gg (- size starting))
(.create gg)))
(defn show-layout [^Layout layout ^String title]
(let [viewer (VisualizationViewer. layout)
frame (JFrame. title)
pane (JPanel. )]
(.add pane viewer)
(doto frame
(.setContentPane pane)
(.pack)
(.setVisible true))
frame))
(defmacro show-layout* [layout-class graph-exp title]
`(let [^Graph g# ~graph-exp]
(show-layout (new ~layout-class g#) (str (quote ~title)))))
(defn show-graph
([^Graph g] (show-graph g "The Graph"))
([^Graph g ^String title] (show-layout (KKLayout. g) title)))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment