public MaximumFlowDemo() { graph = new AdjacencyGraph( new NamedVertexProvider(), new EdgeProvider(), true); s = (NamedVertex)graph.AddVertex(); s.Name = "s"; x = (NamedVertex)graph.AddVertex(); x.Name = "x"; v = (NamedVertex)graph.AddVertex(); v.Name = "v"; w = (NamedVertex)graph.AddVertex(); w.Name = "w"; t = (NamedVertex)graph.AddVertex(); t.Name = "t"; sx = graph.AddEdge(s, x); capacities[sx] = 5; sv = graph.AddEdge(s, v); capacities[sv] = 7; xv = graph.AddEdge(x, v); capacities[xv] = 3; xw = graph.AddEdge(x, w); capacities[xw] = 7; wv = graph.AddEdge(w, v); capacities[wv] = 5; wt = graph.AddEdge(w, t); capacities[wt] = 4; vt = graph.AddEdge(v, t); capacities[vt] = 6; this.graphviz = new GraphvizAlgorithm(this.graph); this.graphviz.ImageType = NGraphviz.Helpers.GraphvizImageType.Svg; this.graphviz.GraphFormat.RankDirection = NGraphviz.Helpers.GraphvizRankDirection.LR; this.graphviz.FormatVertex += new FormatVertexEventHandler(graphviz_FormatVertex); this.graphviz.FormatEdge += new FormatEdgeEventHandler(graphviz_FormatEdge); this.reversedEdgeAugmentor = new ReversedEdgeAugmentorAlgorithm(this.graph); this.reversedEdgeAugmentor.ReversedEdgeAdded += new EdgeEventHandler(reversedEdgeAugmentor_ReversedEdgeAdded); }
public static BidirectionalGraph Simple() { // create a new adjacency graph BidirectionalGraph g = new BidirectionalGraph( new NamedVertexProvider(), new EdgeProvider(), false); NamedVertex u = (NamedVertex)g.AddVertex(); u.Name = "u"; NamedVertex w = (NamedVertex)g.AddVertex(); w.Name = "w"; NamedVertex x = (NamedVertex)g.AddVertex(); x.Name = "x"; NamedVertex y = (NamedVertex)g.AddVertex(); y.Name = "y"; NamedVertex z = (NamedVertex)g.AddVertex(); z.Name = "z"; NamedVertex v = (NamedVertex)g.AddVertex(); v.Name = "v"; g.AddEdge(u, x); g.AddEdge(u, v); g.AddEdge(w, z); g.AddEdge(w, y); g.AddEdge(w, u); g.AddEdge(x, v); g.AddEdge(v, y); g.AddEdge(y, x); g.AddEdge(z, y); return(g); }
public static BidirectionalGraph FileDependency() { // create a new adjacency graph BidirectionalGraph g = new BidirectionalGraph( new NamedVertexProvider(), new EdgeProvider(), false); // adding files and storing names NamedVertex zig_cpp = (NamedVertex)g.AddVertex(); zig_cpp.Name = "zip.cpp"; NamedVertex boz_h = (NamedVertex)g.AddVertex(); boz_h.Name = "boz.h"; NamedVertex zag_cpp = (NamedVertex)g.AddVertex(); zag_cpp.Name = "zag.cpp"; NamedVertex yow_h = (NamedVertex)g.AddVertex(); yow_h.Name = "yow.h"; NamedVertex dax_h = (NamedVertex)g.AddVertex(); dax_h.Name = "dax.h"; NamedVertex bar_cpp = (NamedVertex)g.AddVertex(); bar_cpp.Name = "bar.cpp"; NamedVertex zow_h = (NamedVertex)g.AddVertex(); zow_h.Name = "zow.h"; NamedVertex foo_cpp = (NamedVertex)g.AddVertex(); foo_cpp.Name = "foo.cpp"; NamedVertex zig_o = (NamedVertex)g.AddVertex(); zig_o.Name = "zig.o"; NamedVertex zag_o = (NamedVertex)g.AddVertex(); zag_o.Name = "zago"; NamedVertex bar_o = (NamedVertex)g.AddVertex(); bar_o.Name = "bar.o"; NamedVertex foo_o = (NamedVertex)g.AddVertex(); foo_o.Name = "foo.o"; NamedVertex libzigzag_a = (NamedVertex)g.AddVertex(); libzigzag_a.Name = "libzigzig.a"; NamedVertex libfoobar_a = (NamedVertex)g.AddVertex(); libfoobar_a.Name = "libfoobar.a"; NamedVertex killerapp = (NamedVertex)g.AddVertex(); killerapp.Name = "killerapp"; // adding dependencies g.AddEdge(dax_h, foo_cpp); g.AddEdge(dax_h, bar_cpp); g.AddEdge(dax_h, yow_h); g.AddEdge(yow_h, bar_cpp); g.AddEdge(yow_h, zag_cpp); g.AddEdge(boz_h, bar_cpp); g.AddEdge(boz_h, zig_cpp); g.AddEdge(boz_h, zag_cpp); g.AddEdge(zow_h, foo_cpp); g.AddEdge(foo_cpp, foo_o); g.AddEdge(foo_o, libfoobar_a); g.AddEdge(bar_cpp, bar_o); g.AddEdge(bar_o, libfoobar_a); g.AddEdge(libfoobar_a, libzigzag_a); g.AddEdge(zig_cpp, zig_o); g.AddEdge(zig_o, libzigzag_a); g.AddEdge(zag_cpp, zag_o); g.AddEdge(zag_o, libzigzag_a); g.AddEdge(libzigzag_a, killerapp); return(g); }
public void FinishEdge(Object sender, EdgeEventArgs args) { NamedEdge e = (NamedEdge)args.Edge; NamedVertex v = (NamedVertex)args.Edge.Target; Console.WriteLine("-- {0}, {1}", e.Name, v.Name ); }
public void GenerateGraph() { this.vertexIndices = new Hashtable(); // create a new adjacency graph this.graph = new BidirectionalGraph( new NamedVertexProvider(), new EdgeProvider(), false); int rows = this.Rows; int columns = this.Columns; // adding vertices for (int i = 0; i < rows; ++i) { for (int j = 0; j < columns; ++j) { NamedVertex v = (NamedVertex)this.graph.AddVertex(); v.Name = String.Format("{0},{1}", i.ToString(), j.ToString()); latice[i, j] = v; vertexIndices[v] = new DictionaryEntry(i, j); } } // adding edges for (int i = 0; i < rows - 1; ++i) { for (int j = 0; j < columns - 1; ++j) { this.graph.AddEdge(latice[i, j], latice[i, j + 1]); this.graph.AddEdge(latice[i, j + 1], latice[i, j]); this.graph.AddEdge(latice[i, j], latice[i + 1, j]); this.graph.AddEdge(latice[i + 1, j], latice[i, j]); } } for (int j = 0; j < columns - 1; ++j) { this.graph.AddEdge(latice[rows - 1, j], latice[rows - 1, j + 1]); this.graph.AddEdge(latice[rows - 1, j + 1], latice[rows - 1, j]); } for (int i = 0; i < rows - 1; ++i) { this.graph.AddEdge(latice[i, columns - 1], latice[i + 1, columns - 1]); this.graph.AddEdge(latice[i + 1, columns - 1], latice[i, columns - 1]); } }
public XmlSerializationTest() { m_Graph = new AdjacencyGraph( new NamedVertexProvider(), new NamedEdgeProvider(), true ); u = (NamedVertex)Graph.AddVertex(); u.Name = "u"; v = (NamedVertex)Graph.AddVertex(); v.Name = "v"; w = (NamedVertex)Graph.AddVertex(); w.Name = "w"; uv = (NamedEdge)Graph.AddEdge(u, v); uv.Name = "uv"; uw = (NamedEdge)Graph.AddEdge(u, w); uw.Name = "uw"; }
public static AdjacencyGraph Fsm() { // create a new adjacency graph AdjacencyGraph g = new BidirectionalGraph( new NamedVertexProvider(), new NamedEdgeProvider(), true); NamedEdge e = null; NamedVertex s0 = (NamedVertex)g.AddVertex(); s0.Name = "S0"; NamedVertex s1 = (NamedVertex)g.AddVertex(); s1.Name = "S1"; NamedVertex s2 = (NamedVertex)g.AddVertex(); s2.Name = "S2"; NamedVertex s3 = (NamedVertex)g.AddVertex(); s3.Name = "S3"; NamedVertex s4 = (NamedVertex)g.AddVertex(); s4.Name = "S4"; NamedVertex s5 = (NamedVertex)g.AddVertex(); s5.Name = "S5"; e = (NamedEdge)g.AddEdge(s0, s1); e.Name = "StartCalc"; e = (NamedEdge)g.AddEdge(s1, s0); e.Name = "StopCalc"; e = (NamedEdge)g.AddEdge(s1, s1); e.Name = "SelectStandard"; e = (NamedEdge)g.AddEdge(s1, s1); e.Name = "ClearDisplay"; e = (NamedEdge)g.AddEdge(s1, s2); e.Name = "SelectScientific"; e = (NamedEdge)g.AddEdge(s1, s3); e.Name = "EnterDecNumber"; e = (NamedEdge)g.AddEdge(s2, s1); e.Name = "SelectStandard"; e = (NamedEdge)g.AddEdge(s2, s2); e.Name = "SelectScientific"; e = (NamedEdge)g.AddEdge(s2, s2); e.Name = "ClearDisplay"; e = (NamedEdge)g.AddEdge(s2, s4); e.Name = "EnterDecNumber"; e = (NamedEdge)g.AddEdge(s2, s5); e.Name = "StopCalc"; e = (NamedEdge)g.AddEdge(s3, s0); e.Name = "StopCalc"; e = (NamedEdge)g.AddEdge(s3, s1); e.Name = "ClearDisplay"; e = (NamedEdge)g.AddEdge(s3, s3); e.Name = "SelectStandard"; e = (NamedEdge)g.AddEdge(s3, s3); e.Name = "EnterDecNumber"; e = (NamedEdge)g.AddEdge(s3, s4); e.Name = "SelectScientific"; e = (NamedEdge)g.AddEdge(s4, s2); e.Name = "ClearDisplay"; e = (NamedEdge)g.AddEdge(s4, s3); e.Name = "SelectStandard"; e = (NamedEdge)g.AddEdge(s4, s4); e.Name = "SelectScientific"; e = (NamedEdge)g.AddEdge(s4, s4); e.Name = "EnterDecNumber"; e = (NamedEdge)g.AddEdge(s4, s5); e.Name = "StopCalc"; e = (NamedEdge)g.AddEdge(s5, s2); e.Name = "StartCalc"; return(g); }
public static BidirectionalGraph RegularLattice(int rows, int columns) { // create a new adjacency graph BidirectionalGraph g = new BidirectionalGraph( new NamedVertexProvider(), new EdgeProvider(), false); NamedVertex[,] latice = new NamedVertex[rows, columns]; // adding vertices for (int i = 0; i < rows; ++i) { for (int j = 0; j < columns; ++j) { latice[i, j] = (NamedVertex)g.AddVertex(); latice[i, j].Name = String.Format("{0},{1}", i.ToString(), j.ToString()); } } // adding edges for (int i = 0; i < rows - 1; ++i) { for (int j = 0; j < columns - 1; ++j) { g.AddEdge(latice[i, j], latice[i, j + 1]); g.AddEdge(latice[i, j + 1], latice[i, j]); g.AddEdge(latice[i, j], latice[i + 1, j]); g.AddEdge(latice[i + 1, j], latice[i, j]); } } for (int j = 0; j < columns - 1; ++j) { g.AddEdge(latice[rows - 1, j], latice[rows - 1, j + 1]); g.AddEdge(latice[rows - 1, j + 1], latice[rows - 1, j]); } for (int i = 0; i < rows - 1; ++i) { g.AddEdge(latice[i, columns - 1], latice[i + 1, columns - 1]); g.AddEdge(latice[i + 1, columns - 1], latice[i, columns - 1]); } return(g); }
public static BidirectionalGraph Loop() { // create a new adjacency graph BidirectionalGraph g = new BidirectionalGraph( new NamedVertexProvider(), new EdgeProvider(), false); NamedVertex x = (NamedVertex)g.AddVertex(); x.Name = "x"; NamedVertex y = (NamedVertex)g.AddVertex(); y.Name = "y"; NamedVertex z = (NamedVertex)g.AddVertex(); z.Name = "z"; g.AddEdge(x, y); g.AddEdge(y, z); g.AddEdge(z, x); return(g); }
public static BidirectionalGraph UnBalancedFlow() { // create a new adjacency graph BidirectionalGraph g = new BidirectionalGraph( new NamedVertexProvider(), new EdgeProvider(), false); NamedVertex x = (NamedVertex)g.AddVertex(); x.Name = "x"; NamedVertex y = (NamedVertex)g.AddVertex(); y.Name = "y"; NamedVertex z = (NamedVertex)g.AddVertex(); z.Name = "z"; NamedVertex w = (NamedVertex)g.AddVertex(); w.Name = "w"; g.AddEdge(x, y); g.AddEdge(x, z); g.AddEdge(y, z); g.AddEdge(x, w); g.AddEdge(w, y); g.AddEdge(w, z); return(g); }
/// <summary> /// Updates a vertex that has not been created with the provider /// </summary> /// <param name="v">vertex to update</param> public void UpdateVertex(NamedVertex v) { v.ID = m_NextID++; }
/// <summary> /// Updates a vertex that has not been created with the provider /// </summary> /// <param name="v">vertex to update</param> public void UpdateVertex(NamedVertex v) { v.ID = m_NextID++; }
public void Run() { // create an adjacency graph AdjacencyGraph g = new AdjacencyGraph( new NamedVertexProvider(), new NamedEdgeProvider(), true ); // create a clustered graph ClusteredAdjacencyGraph cg = new ClusteredAdjacencyGraph(g); // adding some vertices to the main graph NamedVertex a = cg.AddVertex() as NamedVertex; a.Name = "a"; NamedVertex b = cg.AddVertex() as NamedVertex; b.Name = "b"; NamedVertex c = cg.AddVertex() as NamedVertex; c.Name = "c"; NamedEdge ab = cg.AddEdge(a, b) as NamedEdge; ab.Name = "ab"; NamedEdge ac = cg.AddEdge(a, c) as NamedEdge; ac.Name = "ac"; // adding a cluster ClusteredAdjacencyGraph cg1 = cg.AddCluster(); // adding vertices and edges to the cluster NamedVertex d = cg1.AddVertex() as NamedVertex; d.Name = "d"; NamedVertex e = cg1.AddVertex() as NamedVertex; e.Name = "e"; NamedVertex f = cg1.AddVertex() as NamedVertex; f.Name = "f"; NamedEdge de = cg1.AddEdge(d, e) as NamedEdge; de.Name = "de"; NamedEdge df = cg1.AddEdge(d, f) as NamedEdge; df.Name = "df"; // adding a second cluster ClusteredAdjacencyGraph cg2 = cg.AddCluster(); // adding vertices NamedVertex h = cg2.AddVertex() as NamedVertex; h.Name = "h"; NamedVertex i = cg2.AddVertex() as NamedVertex; i.Name = "i"; NamedEdge hi = cg2.AddEdge(h, i) as NamedEdge; hi.Name = "hi"; // adding a sub-sub-cluster ClusteredAdjacencyGraph cg21 = cg2.AddCluster(); // adding vertices NamedVertex k = cg21.AddVertex() as NamedVertex; k.Name = "k"; NamedVertex l = cg21.AddVertex() as NamedVertex; l.Name = "l"; NamedEdge ak = cg.AddEdge(a, k) as NamedEdge; ak.Name = "ak"; NamedEdge kl = cg21.AddEdge(k, l) as NamedEdge; kl.Name = "kl"; // interconnecting NamedEdge cd = cg.AddEdge(c, d) as NamedEdge; cd.Name = "cd"; NamedEdge bh = cg.AddEdge(b, h) as NamedEdge; bh.Name = "bh"; NamedEdge ei = cg.AddEdge(e, i) as NamedEdge; ei.Name = "ei"; GraphvizAlgorithm gw = new GraphvizAlgorithm( cg, "../cluster", GraphvizImageType.Svgz ); gw.FormatVertex += new FormatVertexEventHandler(this.FormatVertex); gw.FormatEdge += new FormatEdgeEventHandler(this.FormatEdge); gw.Write("cluster"); cg2.Colapsed = true; gw.Write("cluster_collapsed"); }
void graphviz_FormatVertex(object sender, FormatVertexEventArgs e) { NamedVertex v = (NamedVertex)e.Vertex; e.VertexFormatter.Label = v.Name; }