コード例 #1
0
        /// <summary>
        /// Executes edge dfs
        /// </summary>
        /// <param name="g"></param>
        public void TestAllActions(IVertexAndEdgeListGraph g, string path)
        {
            // Testing dfs all apth
            DepthFirstSearchAlgorithm  dfs  = new DepthFirstSearchAlgorithm(g);
            PredecessorRecorderVisitor visv = new PredecessorRecorderVisitor();

            dfs.RegisterPredecessorRecorderHandlers(visv);
            IVertex s0 = Traversal.FirstVertexIf(g.Vertices, new NameEqualPredicate("S0"));

            dfs.Compute(s0);
            Console.WriteLine("vertex paths");
            foreach (EdgeCollection ec in visv.AllPaths())
            {
                foreach (IEdge edge in ec)
                {
                    Console.WriteLine("{0}->{1}, {2}",
                                      ((NamedVertex)edge.Source).Name,
                                      ((NamedVertex)edge.Target).Name,
                                      ((NamedEdge)edge).Name
                                      );
                }
                Console.WriteLine();
            }
            // end of dfs test

            GraphvizAlgorithm gw = RenderActions(g, path);

            // The all action algorithms
            EdgeDepthFirstSearchAlgorithm edfs = CreateEdgeDfs(g);
            // add tracer
            AlgorithmTracerVisitor vis = AddTracer(edfs, path);
            // add predecessor recorder
            EdgePredecessorRecorderVisitor erec = AddPredecessorRecorder(edfs);

            // computing all actions
            edfs.Compute(s0);

            // display end path edges
            OutputEndPathEdges(erec);

            // display all actions path
            OutputAllActions(erec, gw, path);
        }
コード例 #2
0
        /// <summary>
        /// Adds an algorithm tracer to the edge dfs algorithm
        /// </summary>
        /// <param name="edfs"></param>
        /// <param name="path"></param>
        /// <returns>tracer</returns>
        public AlgorithmTracerVisitor AddTracer(EdgeDepthFirstSearchAlgorithm edfs, string path)
        {
            // The visitor that draws the graph at each iteration
            AlgorithmTracerVisitor vis = new AlgorithmTracerVisitor(
                (IVertexAndEdgeListGraph)edfs.VisitedGraph,
                "tr",
                path,
                GraphvizImageType.Png);

            // setting some vertex,edge style options
            vis.Algo.VertexFormat.Style     = GraphvizVertexStyle.Filled;
            vis.Algo.VertexFormat.FillColor = Color.LightSkyBlue;

            vis.Algo.FormatVertex += new FormatVertexEventHandler(this.FormatVertex);
            vis.Algo.FormatEdge   += new FormatEdgeEventHandler(this.FormatEdge);
            edfs.RegisterTreeEdgeBuilderHandlers(vis);
            edfs.FinishEdge += new EdgeEventHandler(vis.FinishEdge);

            return(vis);
        }
コード例 #3
0
ファイル: Class1.cs プロジェクト: wsgan001/asegrp
        static void Main(string[] args)
        {
            try
            {
/*
 *                              VertexStringDictionary verticesNames = new VertexStringDictionary();
 *                              EdgeStringDictionary edgesNames = new EdgeStringDictionary();
 *                              EdgeDoubleDictionary edgesWeights = new EdgeDoubleDictionary();
 *                              IncidenceGraph g = new IncidenceGraph(true);
 *
 *                              // adding vertex
 *                              Vertex u = g.AddVertex();
 *                              verticesNames[u]="u";
 *                              Vertex v = g.AddVertex();
 *                              verticesNames[v]="v";
 *                              Vertex w = g.AddVertex();
 *                              verticesNames[w]="w";
 *                              Vertex x = g.AddVertex();
 *                              verticesNames[x]="x";
 *                              Vertex y = g.AddVertex();
 *                              verticesNames[y]="y";
 *                              Vertex z = g.AddVertex();
 *                              verticesNames[z]="z";
 *
 *                              // adding edges
 *                              Edge uv = g.AddEdge(u,v);
 *                              edgesNames[uv]="uv";
 *                              edgesWeights[uv]=1;
 *                              Edge ux = g.AddEdge(u,x);
 *                              edgesNames[ux]="ux";
 *                              edgesWeights[ux]=0.8;
 *                              Edge wu = g.AddEdge(w,u);
 *                              g.AddEdge(w,u);
 *                              edgesNames[wu]="wu";
 *                              edgesWeights[wu]=0.2;
 *                              Edge xv = g.AddEdge(x,v);
 *                              edgesNames[xv]="xv";
 *                              edgesWeights[xv]=1.1;
 *                              Edge vy = g.AddEdge(v,y);
 *                              edgesNames[vy]="vy";
 *                              edgesWeights[vy]=2.0;
 *                              Edge wy = g.AddEdge(w,y);
 *                              edgesNames[wy]="wy";
 *                              edgesWeights[wy]=1.5;
 *                              Edge yw = g.AddEdge(y,w);
 *                              edgesNames[yw]="yw";
 *                              edgesWeights[yw]=0.2;
 *                              Edge wz = g.AddEdge(w,z);
 *                              edgesNames[wz]="wz";
 *                              edgesWeights[wz]=0.1;
 *
 *                              RandomGraph.Graph(g, 20,50,new Random(),true);
 *
 * /*
 *                              // do a dfs serach
 *                              Console.WriteLine("---- DepthFirstSearch");
 *                              DepthFirstSearchAlgorithm dfs = new DepthFirstSearchAlgorithm(g);
 *                              //TestDepthFirstSearchVisitor dfsVis =
 *                              //	new TestDepthFirstSearchVisitor(dfs,verticesNames);
 *                              AlgorithmTracerVisitor dfstracer = new
 *                                      AlgorithmTracerVisitor(g,"dfs",".",GraphvizImageType.Png);
 *                              dfstracer.VertexLabels = verticesNames;
 *                              dfstracer.RegisterVertexHandlers(dfs);
 *                              dfstracer.RegisterEdgeHandlers(dfs);
 *
 *                              dfs.Compute();
 */

                Vertex source = u;
                source = RandomGraph.Vertex(g, new Random());
                Console.WriteLine("source: {0}", source.GetHashCode());
                Console.WriteLine("---- BreathFirstSearch");
                BreadthFirstSearchAlgorithm   bfs = new BreadthFirstSearchAlgorithm(g);
                TestBreadthFirstSearchVisitor bfsVis
                    = new TestBreadthFirstSearchVisitor(bfs, verticesNames, source);

                AlgorithmTracerVisitor bfstracer = new
                                                   AlgorithmTracerVisitor(g, "bfs", ".", GraphvizImageType.Png);
//				bfstracer.VertexLabels = verticesNames;
                bfs.RegisterTreeEdgeBuilderHandlers(bfsTracer);
                bfs.RegisterVertexColorizeHandlers(bfsTracer);

                bfs.Compute(source);

/*
 *                              Console.WriteLine("---- Dijkstra");
 *                              DijkstraShortestPathAlgorithm dij = new DijkstraShortestPathAlgorithm(
 *                                      g,
 *                                      edgesWeights
 *                                      );
 *                              TestDijkstraShortestPathVisitor dijVis = new TestDijkstraShortestPathVisitor(dij,verticesNames);
 *                              AlgorithmTracerVisitor dijtracer = new
 *                                      AlgorithmTracerVisitor(g,"dij",".",GraphvizImageType.Png);
 *                              dijtracer.VertexLabels = verticesNames;
 *                              dijtracer.EdgeLabels = edgesWeights;
 *                              dijtracer.RegisterVertexHandlers(dij);
 * //				dijtracer.RegisterEdgeHandlers(dij);
 *                              dij.Compute(g.Vertex(0));
 *
 *                              Console.WriteLine("Distance from {0}", verticesNames[g.Vertex(0)]);
 *                              foreach(DictionaryEntry de in dij.Distances)
 *                              {
 *
 *                                      Console.WriteLine("\t-> {0}, {1}",
 *                                              verticesNames[(Vertex)de.Key],
 *                                              de.Value.ToString()
 *                                              );
 *                              }
 *
 *                              Console.WriteLine("---- Topological sort");
 *                              VertexCollection vs = new VertexCollection();
 *                              TopologicalSortAlgorithm tps= new TopologicalSortAlgorithm(g);
 *                              tps.Compute(vs);
 *                              foreach(Vertex ve in vs)
 *                              {
 *                                      Console.WriteLine("v - {0}",verticesNames[ve]);
 *                              }
 *
 *                              Console.WriteLine("--- graphviz output");
 *                              GraphvizWriterAlgorithm gw = new GraphvizWriterAlgorithm(
 *                                      g,"dotgenerator",".",GraphvizImageType.Png);
 *                              TestGraphvizVertex gv = new TestGraphvizVertex(verticesNames);
 *                              gw.WriteVertex += new VertexHandler( gv.WriteVertex );
 *                              gw.WriteEdge+= new EdgeHandler( gv.WriteEdge );
 *                              gw.Write(GraphvizImageType.Png);
 *                              gw.Write(GraphvizImageType.Svg);
 *                              gw.Write(GraphvizImageType.Svgz);
 *                              gw.Write(GraphvizImageType.Gif);
 *                              gw.Write(GraphvizImageType.Jpeg);
 */
                Console.WriteLine("Test finished");
                String s2 = Console.ReadLine();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.ToString());
                String s = Console.ReadLine();
            }
        }