Exemple #1
0
        private static void GraphPathSearchTest(IGraphPathSearch search, int start)
        {
            Console.WriteLine(search.Name);

            // 打印图中所有顶点到start的路径
            for (int i = 0; i < vertexCount; i++)
            {
                Console.Write(start + " to " + i + " : ");

                if (search.HasPathTo(i))
                {
                    foreach (var v in search.PathTo(i))
                    {
                        if (start == v)
                        {
                            Console.Write(v);
                        }
                        else
                        {
                            Console.Write(" -> " + v);
                        }
                    }
                }
                else
                {
                    Console.Write("No path");
                }

                Console.WriteLine();
            }
        }
        protected void ExecuteSinglePathSearch(IGraphPathSearch <TestVertex, TestEdge> search,
                                               IGraph <TestVertex, TestEdge> graph, TestVertex src, TestVertex dst,
                                               IEdgeWeigher <TestVertex, TestEdge> weigher, int pathCount, IWeight pathCost)
        {
            IResult <TestVertex, TestEdge>       result = search.Search(graph, src, dst, weigher, 1);
            ISet <IPath <TestVertex, TestEdge> > paths  = result.Paths;

            PrintPaths(paths);
            Assert.Equal(Math.Min(pathCount, 1), paths.Count);
            if (pathCount > 0)
            {
                IPath <TestVertex, TestEdge> path = paths.First();
                Assert.Equal(pathCost, path.Cost);
            }
        }
        protected void ExecuteDefaultTest(int pathCount, int pathLength, IWeight pathCost)
        {
            Graph = new TestAdjacencyListsGraph(Vertices, Edges);
            IGraphPathSearch <TestVertex, TestEdge> search = GraphSearch;
            ISet <IPath <TestVertex, TestEdge> >    paths  = search.Search(Graph, A, H, Weigher).Paths;

            Assert.Equal(1, paths.Count);
            IPath <TestVertex, TestEdge> p = paths.First();

            Assert.Equal(A, p.Src);
            Assert.Equal(H, p.Dst);
            Assert.Equal(pathLength, p.Edges.Count);
            Assert.Equal(pathCost, p.Cost);
            paths = search.Search(Graph, A, null, Weigher).Paths;
            PrintPaths(paths);
            Assert.Equal(pathCount, paths.Count);
        }