ruby-graphviz 0.9.16 → 0.9.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/AUTHORS +1 -0
- data/README.rdoc +64 -0
- data/examples/graphml/attributes.ext.graphml +12 -0
- data/examples/graphml/attributes.graphml +40 -0
- data/examples/graphml/cluster.graphml +75 -0
- data/examples/graphml/hyper.graphml +29 -0
- data/examples/graphml/nested.graphml +54 -0
- data/examples/graphml/port.graphml +32 -0
- data/examples/graphml/simple.graphml +30 -0
- data/examples/sample57.rb +6 -0
- data/examples/theory/PERT.png +0 -0
- data/examples/theory/matrix.png +0 -0
- data/examples/theory/pert.rb +47 -0
- data/examples/theory/tests.rb +81 -0
- data/lib/graphviz.rb +45 -8
- data/lib/graphviz/constants.rb +43 -40
- data/lib/graphviz/edge.rb +22 -5
- data/lib/graphviz/elements.rb +39 -0
- data/lib/graphviz/graphml.rb +218 -0
- data/lib/graphviz/math/matrix.rb +221 -0
- data/lib/graphviz/node.rb +11 -0
- data/lib/graphviz/theory.rb +252 -0
- data/lib/graphviz/types.rb +4 -0
- data/lib/graphviz/types/gv_double.rb +20 -0
- metadata +24 -4
data/AUTHORS
CHANGED
data/README.rdoc
CHANGED
@@ -16,6 +16,20 @@ Interface to the GraphViz graphing tool
|
|
16
16
|
|
17
17
|
== CHANGELOG
|
18
18
|
|
19
|
+
=== 0.9.17 :
|
20
|
+
* GraphViz::Edge#node_one and GraphViz::Edge#node_one now have un optional parameter to indicate if you want to (or not) get the port in the name (default: true)
|
21
|
+
* GraphViz#each_node now returns the Hash of nodes if there is no block given.
|
22
|
+
* GraphViz#each_edge now returns the list of edges if there is no block given.
|
23
|
+
* GraphViz#each_graph now returns the Hash of graphs if there is no block given.
|
24
|
+
* Add GraphViz::Node#index : return the node index
|
25
|
+
* Add GraphViz::Edge#index : return the edge index
|
26
|
+
* Add GraphViz#type : return the graph type (graph or digraph)
|
27
|
+
* Add GraphViz#get_edge_at_index and GraphViz#get_node_at_index
|
28
|
+
* Add GvDouble
|
29
|
+
* Add GraphViz::Theory (see examples/theory/tests.rb)
|
30
|
+
* Add GraphML[http://graphml.graphdrawing.org/] support (see sample57.rb)
|
31
|
+
* fixed "edge attribut 'to_ary' invalid" on mri 1.9.2 (by Stefan Huber)
|
32
|
+
|
19
33
|
=== 0.9.16 :
|
20
34
|
* Add <tt>xml2gv</tt>
|
21
35
|
* Rename <tt>GraphViz.parser2</tt> to <tt>GraphViz.parser</tt>
|
@@ -208,6 +222,13 @@ Create a graph from a file
|
|
208
222
|
}
|
209
223
|
}.output(:png => "sample.png")
|
210
224
|
|
225
|
+
GraphML[http://graphml.graphdrawing.org/] support
|
226
|
+
|
227
|
+
require 'graphviz/graphml'
|
228
|
+
|
229
|
+
g = GraphViz::GraphML.new( "graphml/cluster.graphml" )
|
230
|
+
g.graph.output( :path => "/usr/local/bin", :png => "#{$0}.png" )
|
231
|
+
|
211
232
|
At last, you can create familly tree with GraphViz::FamilyTree (<b>beta</b>) :
|
212
233
|
|
213
234
|
require 'graphviz/family_tree'
|
@@ -270,6 +291,49 @@ Ruby/GraphViz also include :
|
|
270
291
|
|
271
292
|
* <tt>xml2gv</tt>, a tools that's allow you to show a xml file as graph.
|
272
293
|
|
294
|
+
== GRAPH THEORY
|
295
|
+
|
296
|
+
require 'graphviz'
|
297
|
+
require 'graphviz/theory'
|
298
|
+
|
299
|
+
g = GraphViz.new( :G ) { ... }
|
300
|
+
|
301
|
+
t = GraphViz::Theory.new( g )
|
302
|
+
|
303
|
+
puts "Adjancy matrix : "
|
304
|
+
puts t.adjancy_matrix
|
305
|
+
|
306
|
+
puts "Symmetric ? #{t.symmetric?}"
|
307
|
+
|
308
|
+
puts "Incidence matrix :"
|
309
|
+
puts t.incidence_matrix
|
310
|
+
|
311
|
+
g.each_node do |name, node|
|
312
|
+
puts "Degree of node `#{name}' = #{t.degree(node)}"
|
313
|
+
end
|
314
|
+
|
315
|
+
puts "Laplacian matrix :"
|
316
|
+
puts t.laplacian_matrix
|
317
|
+
|
318
|
+
puts "Dijkstra between a and f"
|
319
|
+
r = t.moore_dijkstra(g.a, g.f)
|
320
|
+
if r.nil?
|
321
|
+
puts "No way !"
|
322
|
+
else
|
323
|
+
print "\tPath : "; p r[:path]
|
324
|
+
puts "\tDistance : #{r[:distance]}"
|
325
|
+
end
|
326
|
+
|
327
|
+
print "Ranges : "
|
328
|
+
rr = t.range
|
329
|
+
p rr
|
330
|
+
puts "Your graph contains circuits" if rr.include?(nil)
|
331
|
+
|
332
|
+
puts "Critical path : "
|
333
|
+
rrr = t.critical_path
|
334
|
+
print "\tPath "; p rrr[:path]
|
335
|
+
puts "\tDistance : #{rrr[:distance]}"
|
336
|
+
|
273
337
|
== INSTALLATION
|
274
338
|
|
275
339
|
sudo gem install ruby-graphviz
|
@@ -0,0 +1,12 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<graphml xmlns="http://graphml.graphdrawing.org/xmlns"
|
3
|
+
xmlns:xlink="http://www.w3.org/1999/xlink"
|
4
|
+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
5
|
+
xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns
|
6
|
+
graphml+xlink.xsd">
|
7
|
+
<graph edgedefault="directed">
|
8
|
+
<node id="n0" xlink:href="http://graphml.graphdrawing.org"/>
|
9
|
+
<node id="n1" />
|
10
|
+
<edge source="n0" target="n1"/>
|
11
|
+
</graph>
|
12
|
+
</graphml>
|
@@ -0,0 +1,40 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<!-- This file was written by the JAVA GraphML Library.-->
|
3
|
+
<graphml xmlns="http://graphml.graphdrawing.org/xmlns" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
4
|
+
xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://graphml.graphdrawing.org/xmlns/1.0/graphml.xsd">
|
5
|
+
<key id="d0" for="node" attr.name="color" attr.type="string">
|
6
|
+
<default>yellow</default>
|
7
|
+
</key>
|
8
|
+
<key id="d1" for="edge" attr.name="weight" attr.type="double"/>
|
9
|
+
<graph id="G" edgedefault="undirected">
|
10
|
+
<node id="n0">
|
11
|
+
<data key="d0">green</data>
|
12
|
+
</node>
|
13
|
+
<node id="n1"/>
|
14
|
+
<node id="n2">
|
15
|
+
<data key="d0">blue</data>
|
16
|
+
</node>
|
17
|
+
<node id="n3">
|
18
|
+
<data key="d0">red</data>
|
19
|
+
</node>
|
20
|
+
<node id="n4"/>
|
21
|
+
<node id="n5">
|
22
|
+
<data key="d0">turquoise</data>
|
23
|
+
</node>
|
24
|
+
<edge id="e0" source="n0" target="n2">
|
25
|
+
<data key="d1">1.0</data>
|
26
|
+
</edge>
|
27
|
+
<edge id="e1" source="n0" target="n1">
|
28
|
+
<data key="d1">1.0</data>
|
29
|
+
</edge>
|
30
|
+
<edge id="e2" source="n1" target="n3">
|
31
|
+
<data key="d1">2.0</data>
|
32
|
+
</edge>
|
33
|
+
<edge id="e3" source="n3" target="n2"/>
|
34
|
+
<edge id="e4" source="n2" target="n4"/>
|
35
|
+
<edge id="e5" source="n3" target="n5"/>
|
36
|
+
<edge id="e6" source="n5" target="n4">
|
37
|
+
<data key="d1">1.1</data>
|
38
|
+
</edge>
|
39
|
+
</graph>
|
40
|
+
</graphml>
|
@@ -0,0 +1,75 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<!-- This file was written by the JAVA GraphML Library.-->
|
3
|
+
<graphml xmlns="http://graphml.graphdrawing.org/xmlns" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
4
|
+
xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://graphml.graphdrawing.org/xmlns/1.0/graphml.xsd">
|
5
|
+
<key id="color" for="all" attr.name="color" attr.type="string"/>
|
6
|
+
<key id="style" for="all" attr.name="style" attr.type="string"/>
|
7
|
+
<key id="label" for="all" attr.name="label" attr.type="string"/>
|
8
|
+
<key id="shape" for="node" attr.name="shape" attr.type="string"/>
|
9
|
+
<graph id="G" edgedefault="directed">
|
10
|
+
|
11
|
+
<node id="cluster_0:">
|
12
|
+
<graph id="cluster_0">
|
13
|
+
<data key="color">lightgrey</data>
|
14
|
+
<data key="style">filled</data>
|
15
|
+
<data key="label">process #1</data>
|
16
|
+
<node id="a0">
|
17
|
+
<data key="style">filled</data>
|
18
|
+
<data key="style">white</data>
|
19
|
+
</node>
|
20
|
+
<node id="a1">
|
21
|
+
<data key="style">filled</data>
|
22
|
+
<data key="style">white</data>
|
23
|
+
</node>
|
24
|
+
<node id="a2">
|
25
|
+
<data key="style">filled</data>
|
26
|
+
<data key="style">white</data>
|
27
|
+
</node>
|
28
|
+
<node id="a3">
|
29
|
+
<data key="style">filled</data>
|
30
|
+
<data key="style">white</data>
|
31
|
+
</node>
|
32
|
+
<edge id="e0" source="a0" target="a1"/>
|
33
|
+
<edge id="e1" source="a1" target="a2"/>
|
34
|
+
<edge id="e2" source="a2" target="a3"/>
|
35
|
+
</graph>
|
36
|
+
</node>
|
37
|
+
|
38
|
+
<node id="cluster_1:">
|
39
|
+
<graph id="cluster_1">
|
40
|
+
<data key="color">blue</data>
|
41
|
+
<data key="label">process #2</data>
|
42
|
+
<node id="b0">
|
43
|
+
<data key="style">filled</data>
|
44
|
+
</node>
|
45
|
+
<node id="b1">
|
46
|
+
<data key="style">filled</data>
|
47
|
+
</node>
|
48
|
+
<node id="b2">
|
49
|
+
<data key="style">filled</data>
|
50
|
+
</node>
|
51
|
+
<node id="b3">
|
52
|
+
<data key="style">filled</data>
|
53
|
+
</node>
|
54
|
+
<edge id="e3" source="b0" target="b1"/>
|
55
|
+
<edge id="e4" source="b1" target="b2"/>
|
56
|
+
<edge id="e5" source="b2" target="b3"/>
|
57
|
+
</graph>
|
58
|
+
</node>
|
59
|
+
|
60
|
+
<node id="start">
|
61
|
+
<data key="shape">Mdiamond</data>
|
62
|
+
</node>
|
63
|
+
<node id="end">
|
64
|
+
<data key="shape">Mdiamond</data>
|
65
|
+
</node>
|
66
|
+
|
67
|
+
<edge id="e6" source="start" target="a0"/>
|
68
|
+
<edge id="e7" source="start" target="b0"/>
|
69
|
+
<edge id="e8" source="a1" target="b3"/>
|
70
|
+
<edge id="e9" source="b2" target="a3"/>
|
71
|
+
<edge id="eA" source="a3" target="a0"/>
|
72
|
+
<edge id="eB" source="a3" target="end"/>
|
73
|
+
<edge id="eC" source="b3" target="end"/>
|
74
|
+
</graph>
|
75
|
+
</graphml>
|
@@ -0,0 +1,29 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<graphml xmlns="http://graphml.graphdrawing.org/xmlns" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
3
|
+
xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://graphml.graphdrawing.org/xmlns/1.0/graphml.xsd">
|
4
|
+
<graph id="G" edgedefault="directed">
|
5
|
+
<node id="n0"/>
|
6
|
+
<node id="n1"/>
|
7
|
+
<node id="n2"/>
|
8
|
+
<node id="n3"/>
|
9
|
+
<node id="n4"/>
|
10
|
+
<node id="n5"/>
|
11
|
+
<node id="n6"/>
|
12
|
+
<hyperedge>
|
13
|
+
<endpoint node="n0"/>
|
14
|
+
<endpoint node="n1"/>
|
15
|
+
<endpoint node="n2"/>
|
16
|
+
</hyperedge>
|
17
|
+
<hyperedge>
|
18
|
+
<endpoint node="n3"/>
|
19
|
+
<endpoint node="n4"/>
|
20
|
+
<endpoint node="n5"/>
|
21
|
+
<endpoint node="n6"/>
|
22
|
+
</hyperedge>
|
23
|
+
<hyperedge>
|
24
|
+
<endpoint node="n1"/>
|
25
|
+
<endpoint node="n3"/>
|
26
|
+
</hyperedge>
|
27
|
+
<edge source="n0" target="n4"/>
|
28
|
+
</graph>
|
29
|
+
</graphml>
|
@@ -0,0 +1,54 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<!-- This file was written by the JAVA GraphML Library.-->
|
3
|
+
<graphml xmlns="http://graphml.graphdrawing.org/xmlns" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
4
|
+
xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://graphml.graphdrawing.org/xmlns/1.0/graphml.xsd">
|
5
|
+
<key id="color" for="all" attr.name="color" attr.type="string"/>
|
6
|
+
<key id="style" for="graph" attr.name="style" attr.type="string"/>
|
7
|
+
<key id="label" for="all" attr.name="label" attr.type="string"/>
|
8
|
+
<graph id="G" edgedefault="directed">
|
9
|
+
<node id="n0"/>
|
10
|
+
<node id="n1"/>
|
11
|
+
<node id="n2"/>
|
12
|
+
<node id="n3"/>
|
13
|
+
<node id="n4"/>
|
14
|
+
<node id="n5">
|
15
|
+
<graph id="n5:" edgedefault="directed">
|
16
|
+
<data key="color">black</data>
|
17
|
+
<data key="style">filled</data>
|
18
|
+
<data key="label">SUB n5</data>
|
19
|
+
<node id="n5::n0"/>
|
20
|
+
<node id="n5::n1"/>
|
21
|
+
<node id="n5::n2"/>
|
22
|
+
<edge id="e0" source="n5::n0" target="n5::n2"/>
|
23
|
+
<edge id="e1" source="n5::n1" target="n5::n2"/>
|
24
|
+
</graph>
|
25
|
+
</node>
|
26
|
+
<node id="n6">
|
27
|
+
<graph id="n6:" edgedefault="directed">
|
28
|
+
<data key="color">red</data>
|
29
|
+
<data key="style">filled</data>
|
30
|
+
<data key="label">SUB n6</data>
|
31
|
+
<node id="n6::n0">
|
32
|
+
<graph id="n6::n0:" edgedefault="directed">
|
33
|
+
<data key="label">SUB n6::n0</data>
|
34
|
+
<data key="color">blue</data>
|
35
|
+
<data key="style">filled</data>
|
36
|
+
<node id="n6::n0::n0"/>
|
37
|
+
</graph>
|
38
|
+
</node>
|
39
|
+
<node id="n6::n1"/>
|
40
|
+
<node id="n6::n2"/>
|
41
|
+
<edge id="e10" source="n6::n1" target="n6::n0::n0"/>
|
42
|
+
<edge id="e11" source="n6::n1" target="n6::n2"/>
|
43
|
+
</graph>
|
44
|
+
</node>
|
45
|
+
<edge id="e2" source="n5::n2" target="n0"/>
|
46
|
+
<edge id="e3" source="n0" target="n2"/>
|
47
|
+
<edge id="e4" source="n0" target="n1"/>
|
48
|
+
<edge id="e5" source="n1" target="n3"/>
|
49
|
+
<edge id="e6" source="n3" target="n2"/>
|
50
|
+
<edge id="e7" source="n2" target="n4"/>
|
51
|
+
<edge id="e8" source="n3" target="n6::n1"/>
|
52
|
+
<edge id="e9" source="n6::n1" target="n4"/>
|
53
|
+
</graph>
|
54
|
+
</graphml>
|
@@ -0,0 +1,32 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<graphml xmlns="http://graphml.graphdrawing.org/xmlns" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
3
|
+
xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://graphml.graphdrawing.org/xmlns/1.0/graphml.xsd">
|
4
|
+
<graph id="G" edgedefault="directed">
|
5
|
+
<node id="n0">
|
6
|
+
<port name="North"/>
|
7
|
+
<port name="South"/>
|
8
|
+
<port name="East"/>
|
9
|
+
<port name="West"/>
|
10
|
+
</node>
|
11
|
+
<node id="n1">
|
12
|
+
<port name="North"/>
|
13
|
+
<port name="South"/>
|
14
|
+
<port name="East"/>
|
15
|
+
<port name="West"/>
|
16
|
+
</node>
|
17
|
+
<node id="n2">
|
18
|
+
<port name="NorthWest"/>
|
19
|
+
<port name="SouthEast"/>
|
20
|
+
</node>
|
21
|
+
<node id="n3">
|
22
|
+
<port name="NorthEast"/>
|
23
|
+
<port name="SouthWest"/>
|
24
|
+
</node>
|
25
|
+
<edge source="n0" target="n3" sourceport="North" targetport="NorthEast"/>
|
26
|
+
<hyperedge>
|
27
|
+
<endpoint node="n0" port="North"/>
|
28
|
+
<endpoint node="n1" port="East"/>
|
29
|
+
<endpoint node="n2" port="SouthEast"/>
|
30
|
+
</hyperedge>
|
31
|
+
</graph>
|
32
|
+
</graphml>
|
@@ -0,0 +1,30 @@
|
|
1
|
+
<?xml version="1.0" encoding="UTF-8"?>
|
2
|
+
<!-- This file was written by the JAVA GraphML Library.-->
|
3
|
+
<graphml xmlns="http://graphml.graphdrawing.org/xmlns" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
4
|
+
xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://graphml.graphdrawing.org/xmlns/1.0/graphml.xsd">
|
5
|
+
<graph id="G" edgedefault="directed">
|
6
|
+
<node id="n0"/>
|
7
|
+
<node id="n1"/>
|
8
|
+
<node id="n2"/>
|
9
|
+
<node id="n3"/>
|
10
|
+
<node id="n4"/>
|
11
|
+
<node id="n5"/>
|
12
|
+
<node id="n6"/>
|
13
|
+
<node id="n7"/>
|
14
|
+
<node id="n8"/>
|
15
|
+
<node id="n9"/>
|
16
|
+
<node id="n10"/>
|
17
|
+
<edge source="n0" target="n2"/>
|
18
|
+
<edge source="n1" target="n2"/>
|
19
|
+
<edge source="n2" target="n3"/>
|
20
|
+
<edge source="n3" target="n5"/>
|
21
|
+
<edge source="n3" target="n4"/>
|
22
|
+
<edge source="n4" target="n6"/>
|
23
|
+
<edge source="n6" target="n5"/>
|
24
|
+
<edge source="n5" target="n7"/>
|
25
|
+
<edge source="n6" target="n8"/>
|
26
|
+
<edge source="n8" target="n7"/>
|
27
|
+
<edge source="n8" target="n9"/>
|
28
|
+
<edge source="n8" target="n10"/>
|
29
|
+
</graph>
|
30
|
+
</graphml>
|
Binary file
|
Binary file
|
@@ -0,0 +1,47 @@
|
|
1
|
+
$:.unshift( "../../lib" )
|
2
|
+
require 'graphviz'
|
3
|
+
require 'graphviz/theory'
|
4
|
+
|
5
|
+
g = GraphViz.digraph( "G", :path => "/usr/local/bin", :use => "fdp" ) do |g|
|
6
|
+
g.node[:shape => "record"]
|
7
|
+
|
8
|
+
g.start[:label => "Start"]
|
9
|
+
g.task_1[:label => "Task #1 - Duration : 4d"]
|
10
|
+
g.task_2[:label => "Task #2 - Duration : 5.25d"]
|
11
|
+
g.task_3[:label => "Task #3 - Duration : 5.17d"]
|
12
|
+
g.task_4[:label => "Task #4 - Duration : 6.33d"]
|
13
|
+
g.task_5[:label => "Task #5 - Duration : 5.17d"]
|
14
|
+
g.task_6[:label => "Task #6 - Duration : 4.5d"]
|
15
|
+
g.task_7[:label => "Task #7 - Duration : 5.17d"]
|
16
|
+
g.finish[:label => "End"]
|
17
|
+
|
18
|
+
(g.start << g.task_1)[:weight => 0.0]
|
19
|
+
(g.start << g.task_2)[:weight => 0.0]
|
20
|
+
(g.task_1 << g.task_3)[:weight => 4.0]
|
21
|
+
(g.task_1 << g.task_4)[:weight => 4.0]
|
22
|
+
(g.task_2 << g.task_5)[:weight => 5.25]
|
23
|
+
(g.task_3 << g.task_5)[:weight => 5.17]
|
24
|
+
(g.task_4 << g.task_6)[:weight => 6.33]
|
25
|
+
(g.task_5 << g.task_7)[:weight => 5.17]
|
26
|
+
(g.task_6 << g.finish)[:weight => 4.5]
|
27
|
+
(g.task_7 << g.finish)[:weight => 5.17]
|
28
|
+
end
|
29
|
+
g.output( :png => "PERT.png" )
|
30
|
+
|
31
|
+
t = GraphViz::Theory.new( g )
|
32
|
+
|
33
|
+
print "Ranges : "
|
34
|
+
rr = t.range
|
35
|
+
p rr
|
36
|
+
puts "Your graph contains circuits" if rr.include?(nil)
|
37
|
+
|
38
|
+
puts "Critical path : "
|
39
|
+
rrr = t.critical_path
|
40
|
+
print "\tPath :"
|
41
|
+
_ = ""
|
42
|
+
rrr[:path].each do |i|
|
43
|
+
print _ + g.get_node_at_index(i-1).id
|
44
|
+
_ = " -> "
|
45
|
+
end
|
46
|
+
puts
|
47
|
+
puts "\tDistance : #{rrr[:distance]}"
|
@@ -0,0 +1,81 @@
|
|
1
|
+
$:.unshift( "../../lib" )
|
2
|
+
require 'graphviz'
|
3
|
+
require 'graphviz/theory'
|
4
|
+
|
5
|
+
g = GraphViz.digraph( "G", :path => "/usr/local/bin" ) do |g|
|
6
|
+
g.a[:label => "1"]
|
7
|
+
g.b[:label => "2"]
|
8
|
+
g.c[:label => "3"]
|
9
|
+
g.d[:label => "4"]
|
10
|
+
g.e[:label => "5"]
|
11
|
+
g.f[:label => "6"]
|
12
|
+
|
13
|
+
# g.a << g.a
|
14
|
+
g.a << g.b
|
15
|
+
g.a << g.d
|
16
|
+
(g.a << g.f)[:weight => 6, :label => "6"]
|
17
|
+
g.b << g.c
|
18
|
+
g.b << g.d
|
19
|
+
g.b << g.e
|
20
|
+
g.c << g.d
|
21
|
+
(g.c << g.f)[:weight => 2, :label => "2"]
|
22
|
+
g.d << g.e
|
23
|
+
# g.e << g.c
|
24
|
+
end
|
25
|
+
g.output( :png => "matrix.png" )
|
26
|
+
|
27
|
+
t = GraphViz::Theory.new( g )
|
28
|
+
|
29
|
+
puts "Adjancy matrix : "
|
30
|
+
puts t.adjancy_matrix
|
31
|
+
# => [ 0 1 0 1 0 1]
|
32
|
+
# [ 0 0 1 1 1 0]
|
33
|
+
# [ 0 0 0 1 0 1]
|
34
|
+
# [ 0 0 0 0 1 0]
|
35
|
+
# [ 0 0 0 0 0 0]
|
36
|
+
# [ 0 0 0 0 0 0]
|
37
|
+
|
38
|
+
puts "Symmetric ? #{t.symmetric?}"
|
39
|
+
|
40
|
+
puts "Incidence matrix :"
|
41
|
+
puts t.incidence_matrix
|
42
|
+
# => [ 1 1 1 1 0 0 0 0 0 0]
|
43
|
+
# [ 0 -1 0 0 1 1 1 0 0 0]
|
44
|
+
# [ 0 0 0 0 -1 0 0 1 1 0]
|
45
|
+
# [ 0 0 -1 0 0 -1 0 -1 0 1]
|
46
|
+
# [ 0 0 0 0 0 0 -1 0 0 -1]
|
47
|
+
# [ 0 0 0 -1 0 0 0 0 -1 0]
|
48
|
+
|
49
|
+
g.each_node do |name, node|
|
50
|
+
puts "Degree of node `#{name}' = #{t.degree(node)}"
|
51
|
+
end
|
52
|
+
|
53
|
+
puts "Laplacian matrix :"
|
54
|
+
puts t.laplacian_matrix
|
55
|
+
# => [ 3 -1 0 -1 0 -1]
|
56
|
+
# [ 0 4 -1 -1 -1 0]
|
57
|
+
# [ 0 0 3 -1 0 -1]
|
58
|
+
# [ 0 0 0 4 -1 0]
|
59
|
+
# [ 0 0 0 0 2 0]
|
60
|
+
# [ 0 0 0 0 0 2]
|
61
|
+
|
62
|
+
puts "Dijkstra between a and f"
|
63
|
+
r = t.moore_dijkstra(g.a, g.f)
|
64
|
+
if r.nil?
|
65
|
+
puts "No way !"
|
66
|
+
else
|
67
|
+
print "\tPath : "; p r[:path]
|
68
|
+
puts "\tDistance : #{r[:distance]}"
|
69
|
+
end
|
70
|
+
# => Path : ["a", "b", "c", "f"]
|
71
|
+
# Distance : 4.0
|
72
|
+
|
73
|
+
print "Ranges : "
|
74
|
+
rr = t.range
|
75
|
+
p rr
|
76
|
+
puts "Your graph contains circuits" if rr.include?(nil)
|
77
|
+
|
78
|
+
puts "Critical path : "
|
79
|
+
rrr = t.critical_path
|
80
|
+
print "\tPath "; p rrr[:path]
|
81
|
+
puts "\tDistance : #{rrr[:distance]}"
|