示例#1
0
        public void Root()
        {
            var gb = new WIntGraphBuilder(4, false);

            gb.Add(0, 1, 1);
            gb.Add(0, 2, 1);
            gb.Add(1, 2, 1);
            gb.Add(0, 3, 5);
            var graph = gb.ToGraph();

            graph.Prim().Should().Equal(
                (0, new WEdge <int>(1, 1)),
                (0, new WEdge <int>(2, 1)),
                (0, new WEdge <int>(3, 5)));
            graph.Prim(1).Should().Equal(
                (1, new WEdge <int>(0, 1)),
                (1, new WEdge <int>(2, 1)),
                (0, new WEdge <int>(3, 5)));
            graph.Prim(2).Should().Equal(
                (2, new WEdge <int>(0, 1)),
                (2, new WEdge <int>(1, 1)),
                (0, new WEdge <int>(3, 5)));
            graph.Prim(3).Should().Equal(
                (3, new WEdge <int>(0, 5)),
                (0, new WEdge <int>(1, 1)),
                (0, new WEdge <int>(2, 1)));
        }
        public void 重み付きグラフ()
        {
            var gb = new WIntGraphBuilder(5, true);

            gb.Add(0, 1, 1);
            gb.Add(0, 2, 10);
            gb.Add(0, 3, 30);
            gb.Add(0, 4, 40);
            gb.Add(1, 2, 5);
            gb.Add(2, 3, 605);
            gb.Add(2, 4, 6);
            gb.Add(4, 3, 6);
            gb.Add(4, 0, 1);
            var graph = gb.ToGraph();

            graph.ShortestPathBFS(0).Should().Equal(0u, 1u, 1u, 1u, 1u);
            graph.ShortestPathBFS(1).Should().Equal(3u, 0u, 1u, 2u, 2u);
            graph.ShortestPathBFS(2).Should().Equal(2u, 3u, 0u, 1u, 1u);
            graph.ShortestPathBFS(3).Should().Equal(4294967295u, 4294967295u, 4294967295u, 0u, 4294967295u);
            graph.ShortestPathBFS(4).Should().Equal(1u, 2u, 2u, 1u, 0u);

            graph.ShortestPathBFSReverse(0).Should().Equal(0u, 3u, 2u, 4294967295u, 1u);
            graph.ShortestPathBFSReverse(1).Should().Equal(1u, 0u, 3u, 4294967295u, 2u);
            graph.ShortestPathBFSReverse(2).Should().Equal(1u, 1u, 0u, 4294967295u, 2u);
            graph.ShortestPathBFSReverse(3).Should().Equal(1u, 2u, 1u, 0u, 1u);
            graph.ShortestPathBFSReverse(4).Should().Equal(1u, 2u, 1u, 4294967295u, 0u);
        }
        public void 重み付きグラフ()
        {
            var gb = new WIntGraphBuilder(8, true);

            gb.Add(0, 1, 1);
            gb.Add(1, 2, 2);
            gb.Add(2, 3, 3);
            gb.Add(3, 4, 4);
            gb.Add(4, 5, 5);
            gb.Add(5, 6, 6);
            gb.Add(6, 2, 7);
            gb.Add(2, 4, 8);
            gb.Add(4, 7, 9);
            gb.Add(7, 0, 10);
            var(from, edges) = gb.ToGraph().EulerianTrail();
            from.Should().Be(0);
            edges.Should().Equal(new WEdge <int>[] {
                new WEdge <int>(1, 1),
                new WEdge <int>(2, 2),
                new WEdge <int>(3, 3),
                new WEdge <int>(4, 4),
                new WEdge <int>(5, 5),
                new WEdge <int>(6, 6),
                new WEdge <int>(2, 7),
                new WEdge <int>(4, 8),
                new WEdge <int>(7, 9),
                new WEdge <int>(0, 10),
            });
        }
        public void 森の連結重み付き()
        {
            var gb = new WIntGraphBuilder(4, false);

            gb.Add(0, 2, 1);
            gb.Add(1, 3, 1);
            gb.Add(2, 3, 10);
            var graph = gb.ToGraph();
            var res   = graph.Kruskal();

            res.Should().HaveCount(1);
            res[0].Should().Equal(
                (0, new WEdge <int>(2, 1)),
                (1, new WEdge <int>(3, 1)),
                (2, new WEdge <int>(3, 10)));
        }
        public void 重み付きグラフ()
        {
            var gb = new WIntGraphBuilder(8, true);

            gb.Add(0, 1, 1);
            gb.Add(1, 2, 2);
            gb.Add(2, 3, 3);
            gb.Add(3, 4, 4);
            gb.Add(4, 5, 5);
            gb.Add(5, 6, 6);
            gb.Add(4, 7, 7);
            gb.Add(7, 3, 8);
            var(from, edges) = gb.ToGraph().GetCycleDFS();
            from.Should().Be(3);
            edges.Should().Equal(new WEdge <int>[] {
                new WEdge <int>(4, 4),
                new WEdge <int>(7, 7),
                new WEdge <int>(3, 8),
            });
        }
        public void Int()
        {
            var gb = new WIntGraphBuilder(5, true);

            gb.Add(0, 1, 1);
            gb.Add(0, 2, 0);
            gb.Add(0, 3, 1);
            gb.Add(0, 4, 1);
            gb.Add(1, 2, 0);
            gb.Add(2, 3, 1);
            gb.Add(2, 4, 0);
            gb.Add(4, 3, 1);
            gb.Add(4, 0, 1);
            var graph = gb.ToGraph();

            graph.ShortestPath01BFS(0).Should().Equal(new int[] { 0, 1, 0, 1, 0 });
            graph.ShortestPath01BFS(1).Should().Equal(new int[] { 1, 0, 0, 1, 0 });
            graph.ShortestPath01BFS(2).Should().Equal(new int[] { 1, 2, 0, 1, 0 });
            graph.ShortestPath01BFS(3).Should().Equal(new int[] { int.MaxValue, int.MaxValue, int.MaxValue, 0, int.MaxValue });
            graph.ShortestPath01BFS(4).Should().Equal(new int[] { 1, 2, 1, 1, 0 });
        }
        public void 重み付きグラフ()
        {
            var gb = new WIntGraphBuilder(5, false);

            gb.Add(0, 1, 1);
            gb.Add(0, 2, 10);
            gb.Add(0, 3, 30);
            gb.Add(0, 4, 40);
            gb.Add(1, 2, 5);
            gb.Add(2, 3, 605);
            gb.Add(2, 4, 6);
            gb.Add(4, 3, 6);
            gb.Add(4, 0, 1);
            var graph = gb.ToGraph();

            graph.MinimumSpanningTreeBFS().Should().Equal(
                (0, new WEdge <int>(1, 1)),
                (0, new WEdge <int>(2, 10)),
                (0, new WEdge <int>(3, 30)),
                (0, new WEdge <int>(4, 40)));
        }
示例#8
0
        public void Int()
        {
            var gb = new WIntGraphBuilder(5, true);

            gb.Add(0, 1, 1);
            gb.Add(0, 2, 10);
            gb.Add(0, 3, 30);
            gb.Add(0, 4, 40);
            gb.Add(1, 2, 5);
            gb.Add(2, 3, 605);
            gb.Add(2, 4, 6);
            gb.Add(4, 3, 6);
            gb.Add(4, 0, 1);
            var res = gb.ToGraph().WarshallFloyd();

            res[0].Should().Equal(new int[] { 0, 1, 6, 18, 12 });
            res[1].Should().Equal(new int[] { 12, 0, 5, 17, 11 });
            res[2].Should().Equal(new int[] { 7, 8, 0, 12, 6 });
            res[3].Should().Equal(new int[] { 1073741823, 1073741823, 1073741823, 0, 1073741823 });
            res[4].Should().Equal(new int[] { 1, 2, 7, 6, 0 });
        }
示例#9
0
        public void Int()
        {
            var gb = new WIntGraphBuilder(5, false);

            gb.Add(0, 1, 1);
            gb.Add(0, 2, 10);
            gb.Add(0, 3, 30);
            gb.Add(0, 4, 40);
            gb.Add(1, 2, 5);
            gb.Add(2, 3, 605);
            gb.Add(2, 4, 6);
            gb.Add(4, 3, 6);
            gb.Add(4, 0, 1);
            var graph = gb.ToGraph();

            graph.Prim().Should().Equal(
                (0, new WEdge <int>(1, 1)),
                (0, new WEdge <int>(4, 1)),
                (1, new WEdge <int>(2, 5)),
                (4, new WEdge <int>(3, 6)));
        }
示例#10
0
        public void 重み付きグラフ()
        {
            var gb = new WIntGraphBuilder(8, true);

            gb.Add(0, 1, 1);
            gb.Add(1, 2, 2);
            gb.Add(2, 3, 3);
            gb.Add(3, 4, 4);
            gb.Add(4, 5, 5);
            gb.Add(5, 6, 6);
            gb.Add(4, 7, 7);
            gb.Add(7, 3, 8);
            var scc = gb.ToGraph().Scc();

            scc[0].Should().Equal(0);
            scc[1].Should().Equal(1);
            scc[2].Should().Equal(2);
            scc[3].Should().Equal(3, 4, 7);
            scc[4].Should().Equal(5);
            scc[5].Should().Equal(6);
        }
示例#11
0
        public void Int()
        {
            var gb = new WIntGraphBuilder(5, true);

            gb.Add(0, 1, 1);
            gb.Add(0, 2, 10);
            gb.Add(0, 3, 30);
            gb.Add(0, 4, 40);
            gb.Add(1, 2, 5);
            gb.Add(2, 3, 605);
            gb.Add(2, 4, 6);
            gb.Add(4, 3, 6);
            gb.Add(4, 0, 1);
            var graph = gb.ToGraph();

            graph.BellmanFord(0).Should().Equal(new int[] { 0, 1, 6, 18, 12 });
            graph.BellmanFord(1).Should().Equal(new int[] { 12, 0, 5, 17, 11 });
            graph.BellmanFord(2).Should().Equal(new int[] { 7, 8, 0, 12, 6 });
            graph.BellmanFord(3).Should().Equal(new int[] { 1073741823, 1073741823, 1073741823, 0, 1073741823 });
            graph.BellmanFord(4).Should().Equal(new int[] { 1, 2, 7, 6, 0 });
        }
        public void Int()
        {
            var gb = new WIntGraphBuilder(5, true);

            gb.Add(0, 1, 1);
            gb.Add(0, 2, 10);
            gb.Add(0, 3, 30);
            gb.Add(0, 4, 40);
            gb.Add(1, 2, 5);
            gb.Add(2, 3, 605);
            gb.Add(2, 4, 6);
            gb.Add(4, 3, 6);
            gb.Add(4, 0, 1);
            var graph = gb.ToGraph();

            graph.Dijkstra(0).Should().Equal(new int[] { 0, 1, 6, 18, 12 });
            graph.Dijkstra(1).Should().Equal(new int[] { 12, 0, 5, 17, 11 });
            graph.Dijkstra(2).Should().Equal(new int[] { 7, 8, 0, 12, 6 });
            graph.Dijkstra(3).Should().Equal(new int[] { int.MaxValue, int.MaxValue, int.MaxValue, 0, int.MaxValue });
            graph.Dijkstra(4).Should().Equal(new int[] { 1, 2, 7, 6, 0 });
        }
        public void Int()
        {
            var gb = new WIntGraphBuilder(5, false);

            gb.Add(0, 1, 1);
            gb.Add(0, 2, 10);
            gb.Add(0, 3, 30);
            gb.Add(0, 4, 40);
            gb.Add(1, 2, 5);
            gb.Add(2, 3, 605);
            gb.Add(2, 4, 6);
            gb.Add(4, 3, 6);
            gb.Add(4, 0, 1);
            var graph = gb.ToGraph();
            var res   = graph.Kruskal();

            res.Should().HaveCount(1);
            res[0].Should().Equal(
                (0, new WEdge <int>(1, 1)),
                (0, new WEdge <int>(4, 1)),
                (1, new WEdge <int>(2, 5)),
                (4, new WEdge <int>(3, 6)));
        }
        public void 連結ではない重み付き()
        {
            var gb = new WIntGraphBuilder(8, false);

            gb.Add(0, 1, 1);
            gb.Add(0, 2, 2);
            gb.Add(1, 2, 3);
            gb.Add(4, 3, 4);
            gb.Add(4, 7, 5);
            gb.Add(3, 7, 10);
            gb.Add(6, 5, 6);
            var graph = gb.ToGraph();
            var res   = graph.Kruskal();

            res.Should().HaveCount(3);
            res[0].Should().Equal(
                (0, new WEdge <int>(1, 1)),
                (0, new WEdge <int>(2, 2)));
            res[1].Should().Equal(
                (3, new WEdge <int>(4, 4)),
                (4, new WEdge <int>(7, 5)));
            res[2].Should().Equal(
                (5, new WEdge <int>(6, 6)));
        }